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, потому что сообщение об ошибке толкает меня в этом направлении.