我有一个包含复合主键的类Event
(开始日期和结束日期)。
EventPlanning
类拥有Set
个此类Event
个对象,并且必须使用带有XML的hibernate来持久保存它们。
我可以为具有公共主键的类执行此操作:
<!-- EventPlanning xml -->
....
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" column="name" type="string" update="false" />
<set name="events" table="events" cascade="all">
<key column="event_id"> // ###### here! ######
</key>
<one-to-many class="myPackage.Event" />
</set>
...
但我无法了解它如何与复合键一起使用..
使用以下代码替换<key column="event_id">
不起作用:
<key>
<property column="start_date" />
<property column="end_date" />
</key>
如果有人能告诉我正确的语法,我会很高兴的! :)
Event xml如下所示:
<class name="myPackage.Even" table="events">
<composite-id>
<key-property name="startDate" column="start_date" type="date" />
<key-property name="endDate" column="end_date" type="date" />
</composite-id>
<property name="signinDeadline" column="signin_deadline"
type="date" />
<property name="confirmationDeadline" column="confirmation_deadline"
type="date" />
<set name="participants" table="participants" cascade="all">
<key column="event_id">
</key>
<one-to-many class="myPackage.Participants" />
</set>
</class>
提前谢谢! :)
答案 0 :(得分:0)
这样的事情对我有用:
<class name="YourClass" table="your_table" ...>
<composite-id name="compositeId" class="DoubleDate">
<key-property name="start_date" column="start_date"/>
<key-property name="end_date" column="end_date"/>
</composite-id>
...
</class>
public class DoubleDate implements Serializable {
private Date start_date, end_date;
public DoubleDate() {
}
// setters, getters
}
public class YourClass {
private DoubleDate compositeId;
// public no args ctr, getters, setters, etc
}
答案 1 :(得分:0)
现在用JPA和Hibernate工作了更长时间后,我只是说你不应该使用复合主键。缓存使用id作为指向缓存值的键,数据检索方法如get
和load
期望id作为参数等。
拥有一个id字段可以获得所需的额外空间。