JPA - EmbeddedId с @ManytoOne - PullRequest
       12

JPA - EmbeddedId с @ManytoOne

7 голосов
/ 14 марта 2012

У меня проблема с моим кодом (очевидно), и после многих поисков в Интернете я не могу найти ответ на свою проблему, поэтому я задаю свой вопрос здесь.У меня есть это:

@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;
    ...

И я использую Maven, я пишу это в моем файле persistence.xml:

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

Но когда я запускаю программу, неважно, чтоЯ написал, у меня есть это:

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.

Я не вижу, где моя ошибка, я думаю, это из-за класса IdResident, в котором есть объект Entity, но я не знаюкак это сделать

Ответы [ 2 ]

5 голосов
/ 18 марта 2012

Сообщение об ошибке, которое вы получаете, объясняет это довольно хорошо, Embeddable, который используется как встроенный идентификатор, может содержать только базовые отображения, а не отношения.В спецификации JPA 2.0 это сказано следующими словами:

Отображения отношений, определенные во встроенном классе идентификаторов, не поддерживаются.

Просто определите атрибуты, которые являются частью составного идентификаторав встраиваемом объекте, который используется в качестве встроенного идентификатора, и отображает отношения в самой сущности (или в другом встраиваемом объекте и включает сопоставления с @Embedded).

0 голосов
/ 14 марта 2012

По моему мнению, это основано на отображении ManyToOne в классе IdResident, потому что сообщение об ошибке толкает меня в этом направлении.

...