Je l'ai fait mais pour une clé composée avec un seul champ, mais c'est pareil.
Il faut créer un generator spécifique en étendant
Code:
org.hibernate.id.SequenceGenerator
. Ensuite overrider la méthode
Code:
public Serializable generate(SessionImplementor session, Object mappedBean)
qui retourne un objet du type de ta clé composée.
Globalement la méthode :
côté mapping hbm, cela donne un truc du style :
Code:
<composite-id name="id" class="ton objet de clé">
<key-property name ="key" column="<nom physique de la colonne>" type="java.lang.Long"/>
<generator class="ton generator customisé">
<param name="sequence"><nom de la sequence></param>
</generator>
</composite-id>
Attention, suivant la version d'hibernate le tag composite-id ne suporte pas le tag generator. Il suffit de modifier la dtd (hibernate-mapping-3.0.dtd) et hibernate s'ensortira.(il vaut mieux en créer une nouvelle pour ton projet et changer la référence dans les mapping hibernate :
Code:
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/ta dtd perso.dtd">
)
mettre
Code:
<!ELEMENT composite-id ( meta*, (key-property|key-many-to-one)+ , generator? )>
au lieu de
Code:
<!ELEMENT composite-id ( meta*, (key-property|key-many-to-one)+ )>
Ca fonctionne avec hibernate-3.2.5.ga