2017-03-21 1 views
0

J'utilise eclipselink 2.5.1.PK composite EclipseLink avec FK

Disons que j'ai ces deux classes.

JAVA

@Entity 
public class Car implements Serializable { 
    @EmbeddedId 
    protected CarPK carPK; 

    private String color; 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Manufacturor manufacturor; 
    //constructors, getters & setters... 
} 

@Embeddable 
public class CarPK implements Serializable { 
    @NotNull 
    private int idManufacturor; 
    @Temporal(javax.persistence.TemporalType.DATE) 
    private Date date; 
    //constructors, getters & setters... 
} 

voiture a une clé primaire composite (idManufacturor et la date) et idManufacturor est également une clé étrangère faisant référence à la classe manufacturor.

Je rencontre un problème avec le mappage. EclipseLink comprend l'objet manufacturor comme une colonne dans ma table Car.

Erreur

Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: invalid column name : 'manufacturor'. 

Je sais que le problème sera résolu si j'ajoute une colonne FK manufacturor mais il serait répéter.

N'hésitez pas à demander une précision si je ne suis pas assez clair.

Nous vous remercions de votre aide.

Répondre

1

Ajouter la JoinColumn Annotation

@JoinColumn(name = "id_manufacturor", referencedColumnName = "id") 

Nom est le nom de colonne FK dans votre base de données (non entité).

Le numéro de colonne "id" de la référence doit correspondre à l'ID défini dans la table du fabricant.

+0

Merci pour votre aide, j'ai essayé d'ajouter l'annotation mais j'ai cette erreur: Exception Description: Plusieurs mappages inscriptibles existent pour le champ [CAR.IDMANUFACTUROR]. Un seul peut être défini comme accessible en écriture, tous les autres doivent être spécifiés en lecture seule. – Knriano

+0

Ajoutez updatable = false et insertable = false à l'anotation JoinColumn. – tak3shi

+0

Vous venez de sauver ma journée, merci :) – Knriano