我有两张表格如下。
“User Acc”是用户的个人资料详细信息,用户的登录详细信息(用户名密码)位于名为login的单独表格中。当我在Netbeans IDE中生成实体时,有2个表用于登录(数据库)表。一个生成的实体是“Login”,另一个是“LoginId”.Login实体具有对LoginId和UserAcc实体的引用。 LoginId实体具有登录数据库表中的用户名和密码.UserAcc的主键为每个用户的INT。该键是登录表的外键。
现在我想检查用户@loging。我是怎么做的,我创建一个LoginId实例并设置用户名和密码,然后检查具有相同LoginId的任何对象。这是代码 uName和pw是字符串,取自用户输入。
LoginId id=new LoginId(uName, pw);
Session ses = NewHibernateUtil.getSessionFactory().openSession();
Criteria crit = ses.createCriteria(Login.class);
crit.add(Restrictions.eq("id", id));
Entities.Login log = (Entities.Login)crit.uniqueResult();
但是,虽然现有的用户名和密码与给定的用户名和密码相匹配,但log
始终为空。
任何人告诉我应该在哪里检查以及问题是什么。谢谢。 另一个问题是为什么在一个数据库表中为两列(主键)创建一个单独的实体(“LoginId”),为其数据库表创建另一个实体。
登录;
<hibernate-mapping>
<class name="Entities.Login" table="login" catalog="pcw">
<composite-id name="id" class="Entities.LoginId">
<key-property name="uname" type="string">
<column name="uname" length="10" />
</key-property>
<key-property name="pw" type="string">
<column name="pw" length="10" />
</key-property>
</composite-id>
<many-to-one name="useracc" class="Entities.Useracc" fetch="select">
<column name="UserAcc_uid" not-null="true" />
</many-to-one>
</class>
UserAcc:
<hibernate-mapping>
<class name="Entities.Useracc" table="useracc" catalog="pcw">
<id name="uid" type="java.lang.Integer">
<column name="uid" />
<generator class="identity" />
</id>
<property name="fname" type="string">
<column name="fname" length="45" />
</property>
<property name="sname" type="string">
<column name="sname" length="45" />
</property>
<property name="RDate" type="date">
<column name="r_date" length="10" />
</property>
<property name="street" type="string">
<column name="street" length="45" />
</property>
<property name="city" type="string">
<column name="city" length="45" />
</property>
<property name="email" type="string">
<column name="email" length="45" />
</property>
<property name="tel" type="string">
<column name="tel" length="45" />
</property>
<set name="comments" inverse="true" cascade="all">
<key>
<column name="UserAcc_uid" not-null="true" />
</key>
<one-to-many class="Entities.Comment" />
</set>
<set name="logins" inverse="true" cascade="all">
<key>
<column name="UserAcc_uid" not-null="true" />
</key>
<one-to-many class="Entities.Login" />
</set>
</class>
答案 0 :(得分:3)
无论如何,你可以使用HQL来解决它,它看起来会越来越像这样:
public boolean authenticate(Sting username,String pass){
Session ses = NewHibernateUtil.getSessionFactory().openSession();
String sql = "from Login login where login.username:= username and login.pass = :=pass";
Query query = session.createQuery(sql);
query.setString("username",username);
query.setString("pass",pass);
List<Login> result = query.list();
//close session, transaction,etc....
if (result ==null)
return false;
else
return true;
}