Eine Profiltabelle hat eine Zuordnung von eins zu viele mit einer Privilege-Tabelle. Die Berechtigungstabelle hat einen mehrteiligen Schlüssel, eine profile_id und eine privileg_id. Ich möchte von der Profiltabelle nur zur Profilid in die Privilege-Tabelle wechseln und eine Sammlung von Berechtigungen zurückerhalten.JPA @OneToMany Join auf Teil eines mehrteiligen Schlüssels
In meinem Profil Klasse Ich habe
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "PROF_ID")
public List<ProfilePrivilegeEO> getProfilePrivileges()
{
return m_profilePrivileges;
}
Meine Berechtigungsklasse
private ProfilePrivilegeId m_profileId;
@EmbeddedId
public ProfilePrivilegeId getProfileId()
{
return m_profileId;
}
Wo ProfilePrivilegeId ist
@Embeddable
public class ProfilePrivilegeId
implements Serializable
{
private Integer m_profileId;
private Integer m_privNumber;
@Column(name = "PROF_ID")
public Integer getProfileId()
{
return m_profileId;
}
@Column(name = "PRIV_NUM")
public Integer getPrivNumber()
{
return m_privNumber;
}
.....
}
Allerdings, wenn ich tun, dass der statische Weber sagt:
The @JoinColumns on the annotated element [method getProfilePrivileges] from the entity
class [class com.acme.ProfileEO] is incomplete. When the source entity class uses a
composite primary key, a @JoinColumn must be specified for each join column using the
@JoinColumns. Both the name and the referencedColumnName elements must be specified in
each such @JoinColumn.
Allerdings hat die Profiltabelle keine Kenntnis von privilege_ids ... Ich sehe nicht, warum JPA verlangen sollte, dass ich beide Schlüssel der Berechtigungstabelle angabe, das ist nur eine willkürliche Entscheidung von jpa ohne gültigen Grund. .. Was muss ich tun, damit das funktioniert? (Ich verwende EclipseLInk.)
Der erste Teil ist was ich getan habe. Das Profil ist OneToMany zum Privileg. nicht andersrum. Der Join ist nur auf der Profil-ID. – MeBigFatGuy
Was ist ProfilePrivilegeEO? Fügen Sie die Annotation @JoinColumns ein und verwenden Sie die beiden @JoinColumn dort. Dies wirkt sich nicht negativ auf das generierte Schema aus, da in der @OneToMany der Schlüssel in der fremden Klasse liegt, der Berechtigung (genau dort, wo sie eigentlich ist und sein sollte). –
ProfilePrivilegeEO ist die Entität für die Berechtigungstabelle. Ich habe nicht zwei @ JoinColumns zur Angabe von der Profilklasse, da sie nicht über Berechtigungen verfügt. Das ist das Problem. – MeBigFatGuy