0

我有一个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>

如果有人能告诉我正确的语法,我会很高兴!:)

事件 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>

提前致谢!:)

4

2 回答 2

0

Something like this works for me:

<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
}
于 2012-11-24T12:45:03.787 回答
0

在使用 JPA 和 Hibernate 工作了更长时间之后,我只想说您根本不应该使用复合主键。缓存使用 id 作为指向缓存值的键、数据检索方法(例如getload期望 id 作为参数等)。通过 id 字段获得的优势可以抵消它所需的额外空间。

于 2013-02-01T15:32:47.640 回答