【发布时间】:2023-04-10 03:46:01
【问题描述】:
我有下面的映射
<class name="User" table="user">
<composite-key class="UserPk">
<key-property name="userId" column="user_id"/>
<key-property name="emailId" column="email_id"/>
</composite-key>
<property name="address" column="address"/>
</class>
<query name="findUserDetails">
<![CDATA[
select u from User u where u.id.userId = :userId and u.id.emailId = :emailId
]]>
</query>
Java 类
class User implements Serializable{
private UserPk id;
private String address;
//setters and getters
}
class UserPk implements Serializable{
private String userId;
private String emailId;
//setters and getters
}
在我的数据库中,我有以下结构的用户表
_______________________________________________________________________________
User_id email_id address
E101 abc@yahoo.com America
E102 xyz@yahoo.com UK
_______________________________________________________________________________
当我执行上面提到的命名查询时 当我将 userId 设置为“E101”并将 emailId 设置为“abc@yahoo.com”时。它返回一个用户对象,其属性地址设置为“美国”,但 id 为空。
为什么复合 id 为空?
注意:理想情况下,我应该在 UserPk 类中实现 equals 和 hashcode,但只是省略了它,因为我猜它与复合 id 为 null 无关。
任何人都可以帮助我缺少什么吗?
编辑:
Query findTransQuery = HibernateHelper.currentSession().getNamedQuery("findUserDetails");
findTransQuery.setParameter("userId", "E101");
findTransQuery.setParameter("emailId", "abc@yahoo.com");
List<User> users= findTransQuery.list();
【问题讨论】:
-
“省略它” - 请澄清 - 您的代码实现了 hashCode/equals 但您在问题中省略了它。或者你的代码没有实现 hashCode/equals...?
-
是的,我的代码有 equals/hashcode 。我只是从上面的问题中省略了。
-
谁能帮帮我!
-
没人帮我..我被困在这里了!!
标签: java hibernate composite-key composite-primary-key