2012-03-14 23 views
7

Kodumla ilgili bir sorunum var (açıkçası) ve İnternet'te yapılan birçok aramadan sonra, sorunuma bir yanıt bulamıyorum, bu yüzden sorumu burada soruyorum. Benim persistence.xml bu yazma ettik,JPA - @ManytoOne ile EmbeddedId

@Entity 
public class Resident 
{ 
    /** Attributes */ 
    @EmbeddedId 
    private IdResident idResident; 
    ... 

@Embeddable 
public class IdResident { 
    @Column(name="NOM") 
    private String nom; 
    @ManyToOne 
    @JoinColumn(name="CODE") 
    private Port port; 
    ... 

@Entity 
public class Port 
{ 
    /** Attributes */ 
    @Id 
    @Column(name="CODE") 
    private String code; 
    @Column(name="NOM") 
    private String nom; 
    ... 

Ve Maven kullanıyorum:

<class>beans.Port</class> 
<class>beans.Resident</class> 

Ama programı çalıştırdığınızda olursa olsun ben ettik Ne bu var bunu alabilir, yazma:

Exception Description: The mapping [port] from the embedded ID class 
[class beans.IdResident] is an invalid mapping for this class. An embeddable class that 
is used with an embedded ID specification (attribute [idResident] from the source 
[class beans.Resident]) can only contain basic mappings. Either remove the non 
basic mapping or change the embedded ID specification on the source to be embedded. 

benim hatam nerede olduğunu, bunun nedeni IdResident sınıf wich olduğunu düşünüyorum göremediğiniz da içinde bir varlık nesnesi vardır, ancak bunu

FIW nasıl bilmiyorum

cevap

5

Hata iletisini oldukça iyi açıklıyorsunuz, Katıştırılmış kimlik olarak kullanılan Embeddable, yalnızca temel eşleştirmeler içerebilir, ilişkiler değil. JPA 2.0 spesifikasyonu bu şu sözlerle anlatılıyor: gömülü bir id sınıf içinde tanımlanmış

İlişki eşlemeleri desteklenen değildir.

Sadece gömülü kimliği olarak kullanılan gömülebilir içinde kompozit id parçası olan özelliklerini ve varlık kendisinde harita ilişkilerini tanımlayan (veya başka bir gömülebilir ve @Embedded ile eşleştirmeleri ekleyin).

0

Benim görüşüme göre bu, IDResident sınıfındaki ManyToOne eşleştirmesine dayanıyor, hata iletisinin beni bu yöne doğru itmesine neden oluyor.