2016-09-01 4 views
1

Ich muss eine schlecht gestaltete DB zuordnen. Und in der Klasse "Cote" gibt es eine zusammengesetzte PK mit FK-Feldern. Also habe ich ein Embedded-Objekt erstellt, um die Verwendung von abgeleiteten Entitäten mit IdClass zu vermeiden. Also habe ich versucht, dies:JPA HIBERNATE - Mapping einer Spalte zweimal (embeddedID und POJO)

@Entity 
@Table(name="EVA_COTE") 
public class Cote implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = -3902534586060936635L; 

@EmbeddedId 
private CotePK cotePK; 

@ManyToOne 
@JoinColumn(name="Evaluation", referencedColumnName = "NUDOSS") 
private Evaluation evaluation; 

@ManyToOne 
@JoinColumn(name="CRITERE", referencedColumnName = "CODE") 
private Critere critere; 

@ManyToOne 
@JoinColumn(name="SEUIL", referencedColumnName = "CODE") 
private Seuil seuil; 

@Column(name="VALEUR", columnDefinition="Decimal(5,0)") 
private Integer valeur; 

@Column(name="OBSERVATIONS", length=500) 
private String observations; 

Mit folgendem EmbeddedId:

@Embeddable 
public class CotePK implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = 6835265195560184935L; 
@Column(name="Evaluation", nullable=false) 
private Integer evaluationId; 

@Column(name="CRITERE", nullable =false) 
private String critereId; 

@Column(name="SEUIL", nullable=false) 
private String seuilId; 

Wie Sie kann ich sehen, verwenden Sie die Spalten Auswertung critère und Seuil einmal im embeddedId und einmal in der Klasse Cote. Und natürlich funktioniert es nicht und ich weiß nicht mehr, was ich versuchen soll. Gibt es eine Möglichkeit, JPA zu zwingen, die beiden Felder zu verknüpfen?

Antwort

0

Meine letzte Lösung: @Entity @Table (name = "EVA_COTE") public class Cote implementiert Serializable {

/** 
* 
*/ 
private static final long serialVersionUID = -3902534586060936635L; 

@EmbeddedId 
private CotePK cotePK; 

@ManyToOne 
@MapsId("evaluationId") 
@JoinColumn(name="EVALUATION", referencedColumnName = "NUDOSS") 
private Evaluation evaluation; 

@ManyToOne 
@MapsId("critereId") 
@JoinColumn(name="CRITERE", referencedColumnName = "CODE") 
private Critere critere; 

@ManyToOne 
@MapsId("seuilId") 
@JoinColumn(name="SEUIL", referencedColumnName = "CODE") 
private Seuil seuil; 
0

diese Anmerkung In den zusammengesetzten Primärschlüssel

 @EmbeddedId    
     @AttributeOverrides({ 
       @AttributeOverride(name="column_varible_name_1", [email protected](name="column_name_1", nullable=false, length=<x>)), 
       @AttributeOverride(name="column_varible_name_2", [email protected](name="column_name_2", nullable=false, length=<x>)) }) 
Verwandte Themen