Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 1 post ] 
Author Message
 Post subject: Redondance de mapping
PostPosted: Wed Oct 15, 2014 9:02 am 
Newbie

Joined: Wed Oct 15, 2014 8:35 am
Posts: 2
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 joinColumnS 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 (JoinColumnS).

Pourquoi Hibernate considère qu'il y a une redondance de colonnes bien que la colonne "redondante" est définie dans un mapping multiple (@JoinColumns) ?
Pourquoi hibernate ne considère t-il pas que ce sont les 2 colonnes de @joinColumns qui forme UN mapping ? et considère que chacune des @JoinColumn du @JoinColumns 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


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.