Bonjour à toutes et à tous,
Dans le cadre d'un projet utilisant Hibernate et XDoclet, je cherche à établir une association one-to-one avec les annotations XDoclet. La particularité du mapping est que la clé étrangère est également la clé primaire de la table. Plus précisément, voici la structure de table simplifiée que je souhaite reproduire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
---------------
CONTRAT |
-------------- |
ID_CONTRAT (PK)|
... |
---------------
--------------------
SUPPRESSION_CONTRAT |
--------------------
ID_CONTRAT (PK+FK) |
... |
-------------------- |
Ca a l'air simple comme ça !
Voici le mapping que j'ai essayé :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/**
*
* @hibernate.class table="CONTRAT" lazy="false"
*/
public class Contrat {
private Long identifiant = null;
private SuppressionContrat suppressionContrat;
...
/**
* @hibernate.id column="ID_CONTRAT" type="java.lang.Long"
* @hibernate.generator class="sequence"
* @hibernate.param name="sequence" value="SEQ_CONTRAT"
* @return java.lang.Long
*/
public Long getIdentifiant() {
return identifiant;
}
public void setIdentifiant(Long identifiant) {
this.identifiant = identifiant;
}
...
/**
*
* @hibernate.one-to-one class="SuppressionContrat"
* name="suppressionContrat" property-ref="contrat"
* @return SuppressionContrat
*/
public SuppressionContrat getSuppressionContrat() {
return suppressionContrat;
}
public void setSuppressionContrat(SuppressionContrat suppressionContrat) {
this.suppressionContrat = suppressionContrat;
}
}
/**
*
* @hibernate.class table="SUPPRESSION_CONTRAT" lazy="false"
*/
public class SuppressionContrat extends BaseEntity {
private Contrat contrat;
...
/**
* @return Contrat
* @hibernate.id name="contrat" type="java.lang.Long"
* column = "ID_CONTRAT"
* lazy="false"
*/
public Contrat getContrat() {
return contrat;
}
public void setContrat(Contrat contrat) {
this.contrat = contrat;
}
} |
Or, quand je lance le serveur, j'obtiens l'erreur suivante :
org.hibernate.MappingException: property-ref not found: contrat in entity: SuppressionContrat
Si je comprends bien l'erreur, le property-ref n'est pas reconnu parce que c'est un "id" (puisque c'est la clé primaire) et non un "property" ?
Peut-être que tout simplement avoir un champ à la fois clé primaire et étrangère n'est pas possible en Hibernate ?
Merci d'avance de vos réponses!
Partager