Java 主键的单独实体
我有两张桌子,如下所示 “User Acc”是用户的配置文件详细信息,用户的登录详细信息(用户名密码)位于一个单独的名为login的表中。当我在Netbeans IDE中生成实体时,有两个表用于登录(数据库)表。一个生成的实体是“Login”,另一个是“LoginId”。Login实体引用LoginId和UserAcc实体。LoginId实体具有登录数据库表中的用户名和密码。UserAcc具有每个用户的主键,即INT。该键是登录表的外键 现在我想检查用户@loging。我要做的是,创建一个LoginId实例,设置用户名和密码,然后检查具有相同LoginId的任何对象。这是代码。Java 主键的单独实体,java,hibernate,Java,Hibernate,我有两张桌子,如下所示 “User Acc”是用户的配置文件详细信息,用户的登录详细信息(用户名密码)位于一个单独的名为login的表中。当我在Netbeans IDE中生成实体时,有两个表用于登录(数据库)表。一个生成的实体是“Login”,另一个是“LoginId”。Login实体引用LoginId和UserAcc实体。LoginId实体具有登录数据库表中的用户名和密码。UserAcc具有每个用户的主键,即INT。该键是登录表的外键 现在我想检查用户@loging。我要做的是,创建一个Log
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();
但是,即使存在与给定用户名和密码匹配的现有用户名和密码,日志
始终为空
有人告诉我应该去哪里检查,问题是什么吗。非常感谢。
我的另一个问题是,为什么要为一个数据库表中的两列(主键)创建一个单独的实体(“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>
无论如何,您可以使用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;
}
public boolean身份验证(Sting用户名、字符串传递){
Session ses=NewHibernateUtil.getSessionFactory().openSession();
String sql=“from Login Login where Login.username:=用户名和Login.pass=:=pass”;
Query=session.createQuery(sql);
query.setString(“用户名”,username);
query.setString(“pass”,pass);
列表结果=query.List();
//关闭会话、事务等。。。。
如果(结果==null)
返回false;
其他的
返回true;
}
您可以发布这两个类之间的映射吗?当然可以。感谢您的关注我的主要问题是::我的一个表有两个主键。当Netbeans IDE生成实体类时,将创建一个单独的实体,其中包括2个主键。然后,表示该表的实体有一个对该单独实体的引用,其他feild表示该表的列。我正在寻找为什么有一个单独的实体类?谢谢。我想知道为什么主键有一个单独的实体?我不明白“主键的单独实体”到底是什么意思,但规则是每个表和类都应该有主键和ID,所以每个表上都会有主键。是的。。但是我的一个表有两个主键。当Netbeans IDE生成实体类时,将创建一个单独的实体,其中包括2个主键。然后,表示该表的实体有一个对该单独实体的引用,其他feild表示该表的列。我正在寻找为什么有一个单独的实体类?