I have a class Event containing a composite primary key (start date and end date).
A EventPlanning class holds a Set of such Event objects and has to persist them using hibernate with XML.
I can do this for classes with a common primary key:
<!-- 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>
...
but I can’t find out how this works with a composite key..
replacing the <key column="event_id"> with the following code doesn’t work:
<key>
<property column="start_date" />
<property column="end_date" />
</key>
I’d be glad if somebody can show me the right syntax! 🙂
the Event xml looks like this:
<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>
thanks in advance! 🙂
After having now worked longer with JPA and Hibernate, I’d just say that you simply should not use composite primary keys. Caches use ids as keys that point to cached values, data retrieving methods like
getandloadexpect the id as parameter etc.The advantages gained by having an id field pay off against the additional space it needs.