Bonjour,
J'ai cherché sur plusieurs forums de puis 3 jours et je ne trouve pas de réponse à mon cas particulter.
J'ai cette classe représentant une table en base Client.class avec ces annotations de mapping générées par hibernate tools reverse engineering:
Code:
@Entity
@DynamicInsert
@DynamicUpdate
@Table(name = "CLIENT")
public class Client{
private ClientSousFamille clntClsfCode
private ClientFamille clntClfaCode;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn( name = "CLNT_CLFA_CODE", referencedColumnName = "CLSF_CLFA_CODE"), @JoinColumn(name = "CLNT_CLSF_CODE", referencedColumnName = "CLSF_CODE") })
public ClientSousFamille getClntClsfCode()
{
return this.clntClsfCode;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CLNT_CLFA_CODE", insertable = false, updatable = false)
public ClientFamille getClntClfaCode()
{
return this.clntClfaCode;
}
}
La classe ClientSousFamille a un EmbeddedId qui est une classe Embeddable avec 2 champs CLSF_CLFA_CODE et CLSF_CODE
Je souhaiterais créer un nouveau Client et pouvoir lui mettre une ClientFamille et une ClientSousFamille lors de l'insertion de ce nouveau Client.
Le problème est que la colonne CLNT_CLFA_CODE est mappée 2 fois dans la classe Client, ce qui n'est pas autorisé par Hibernate sauf si l'un de 2 mapping est déclaré en insertable = false et updatable = false or je dois pouvoir mettre une valeur dans ClientFamille et ClientSousFamille.
Mais dans mon cas, CLNT_CLFA_CODE est mappé une fois pour ClientFamille normalement, et une autre fois à l'intérieur d'une anotation joinColumn
S donc pas directement.
Je comprend pourquoi on ne peut pas définir la même colonne dans plusieurs mapping (@JoinColumn) dans la même classe mais pas quand elle fait partie d'une mapping multiple (JoinColumn
S).
Pourquoi Hibernate considère qu'il y a une redondance de colonnes bien que la colonne "redondante" est définie dans un mapping multiple (@JoinColumn
s) ?
Pourquoi hibernate ne considère t-il pas que ce sont les 2 colonnes de @joinColumn
s qui forme UN mapping ? et considère que chacune des @JoinColumn du @JoinColumn
s forme un mapping à part entière ?.
Y-a-t-il au final une solution pour ajouter une CLientFamille et une ClientSousFamille à mon client lors d'un insert ou d'un update ?
Merci pour votre aide.
PS: Je sais que ce schéma relationnel n'est pas bon mais on ne me laisse pas le choix et je dois faire avec.
Version Hibernate : 4.2.2