Java 主键的单独实体

Java 主键的单独实体,java,hibernate,Java,Hibernate,我有两张桌子,如下所示 “User Acc”是用户的配置文件详细信息,用户的登录详细信息(用户名密码)位于一个单独的名为login的表中。当我在Netbeans IDE中生成实体时,有两个表用于登录(数据库)表。一个生成的实体是“Login”,另一个是“LoginId”。Login实体引用LoginId和UserAcc实体。LoginId实体具有登录数据库表中的用户名和密码。UserAcc具有每个用户的主键,即INT。该键是登录表的外键 现在我想检查用户@loging。我要做的是,创建一个Log

我有两张桌子,如下所示

“User Acc”是用户的配置文件详细信息,用户的登录详细信息(用户名密码)位于一个单独的名为login的表中。当我在Netbeans IDE中生成实体时,有两个表用于登录(数据库)表。一个生成的实体是“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();
但是,即使存在与给定用户名和密码匹配的现有用户名和密码,
日志
始终为空

有人告诉我应该去哪里检查,问题是什么吗。非常感谢。 我的另一个问题是,为什么要为一个数据库表中的两列(主键)创建一个单独的实体(“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表示该表的列。我正在寻找为什么有一个单独的实体类?