JPA - EmbeddedId с @ManytoOne

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

@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 ответа

Решение

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

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

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

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

Другие вопросы по тегам