2016-05-11 3 views
1

J'ai deux classes et je veux utiliser relation OneToMany avec EmbeddedId (Im travaillant avec kundera cadre) ma classe d'entité capteur:OneToMany avec EmbeddedId et kundera

public class SensorEntitie implements Serializable { 
    @EmbeddedId 
    private CompoundKey key; 
    @Column 
    private float temperature; 
    @Column 
    private float pressure; 

    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER) 
    @JoinColumn(name="what I should to put here") 
    private List<PieceEntitie> pieces; 
} 
@Embeddable 
    public class CompoundKey 
    { 
     @Column 
     private String IdSensor;   
     @Column 
     private long date;   
     @Column(name = "event_time") 
     private long eventTime; 

mon entité de classe pièce

public class PieceEntitie implements Serializable{ 

    /** 
    * 
    */ 
    @Id 
    private String IdPiece; 
    @Column 
    private double width; 
    @Column 
    private double height; 
    @Column 
    private double depth; 

mais comment puis-je remplir le vide dans @JoinColumn

Répondre

2

J'ai trouvé la solution: utiliser relation OneToMany avec EmbeddedId, je dois déclarer joinColumns et multiple de JoinColumn

@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER) 
    @JoinColumns({ 
     @JoinColumn(name = "idsensor", referencedColumnName = "idsensor"), 
     @JoinColumn(name = "date", referencedColumnName = "date"), 
     @JoinColumn(name = "event_time", referencedColumnName = "event_time") 
}) 
+0

Alors qu'en général mappedBy fonctionnera, il y a des circonstances où '@ JoinColumns' est nécessaire, par exemple lorsqu'une clé composite dans une table fait partie d'une clé primaire dans une autre dans un '@ ManyToOne'. C'est dommage que JPA n'ait pas de support pour cela (ou si je n'ai pas trouvé ça magique). – NealeU

1

Y ous devez faire quelques étapes suivantes pour le problème de fixation

  1. Retirez @JoinColumn vous ne avez pas besoin d'écrire cette déclaration
  2. Supprimer @OneToMany pour objet créé
  3. Bind @OneToMany avec getter selon mon code suivant
@OneToMany(mappedBy = "pieceEntitie", cascade = CascadeType.ALL, 
fetch=FetchType.EAGER) 
public Set<PieceEntitie> getPieceEntitie() { 
      return pieceEntitie; 
    } 
+0

J'ai essayé votre solution, et je fixe quelques problèmes, mais cela ne changer quelque chose, mon framework enregistre les données dans des tables séparées sans aucune relation entre deux tables, donc je ne peux pas obtenir par exemple toutes les données associées à ma table de capteurs –