在hibernate中,如果表有两个主键,如何使用load方法
我正在创建一个带有两个主键的表。第一个是在hibernate中,如果表有两个主键,如何使用load方法,hibernate,Hibernate,我正在创建一个带有两个主键的表。第一个是id(Integer),第二个是email(varchar2(50))。 我的映射文件包含 <hibernate-mapping package="suri.sahasra"> <class name="Person" table="PERSONS"> <composite-id name="pkField" class="PKField"> <key-propert
id(Integer)
,第二个是email(varchar2(50))
。
我的映射文件包含
<hibernate-mapping package="suri.sahasra">
<class name="Person" table="PERSONS">
<composite-id name="pkField" class="PKField">
<key-property name="personId" column="person_id"/>
<key-property name="email" column="email"/>
</composite-id>
<property name="firstName" column="first_name"/>
<property name="lastName" column="last_name"/>
<property name="age" column="age"/>
</class>
</hibernate-mapping>
如果表包含两个主键,如何检索数据。请帮助我。创建
PKField
的实例并将其传递给load()方法
注意
确保复合密钥类满足指定的条件
- 它必须实现java.io.Serializable
- 它必须重新实现equals()和hashCode(),并与数据库的复合键相等概念保持一致
PKField
的实例,并将其传递给load()方法
注意
确保复合密钥类满足指定的条件
- 它必须实现java.io.Serializable
- 它必须重新实现equals()和hashCode(),并与数据库的复合键相等概念保持一致
- 您必须使用
Person p1=(Person) ss.load(Person.class,new PKField("1","email"));
PKField必须实现.equals()和hashcode()方法,
hibernate依靠这些方法来缓存和比较数据。您必须使用
Person p1=(Person) ss.load(Person.class,new PKField("1","email"));
PKField必须实现.equals()和hashcode()方法,
hibernate依赖这些方法来缓存和比较数据。如果复合id的所有部分都匹配,则复合id意味着记录是相同的。也就是说,行
ID | EMAIL
----+-------------------
1 | xyz@somewhere.com
1 | xyz@elsewhere.com
表示要休眠的不同对象。因此,您需要将复合键的所有部分传递给load(…)
,以标识应该加载的对象
如果您的意图是id本身唯一地标识一个记录,对于电子邮件也是如此,那么将其中一个声明为标识符,另一个声明为。您可能必须使用查询按自然id获取实体(不确定,我自己从未使用过)。复合id意味着如果复合id的所有部分都匹配,则记录是相同的。也就是说,行
ID | EMAIL
----+-------------------
1 | xyz@somewhere.com
1 | xyz@elsewhere.com
表示要休眠的不同对象。因此,您需要将复合键的所有部分传递给load(…)
,以标识应该加载的对象
如果您的意图是id本身唯一地标识一个记录,对于电子邮件也是如此,那么将其中一个声明为标识符,另一个声明为。您可能必须使用查询来通过自然id获取实体(不确定,我自己从未使用过)