Ich habe eine einfache Tabelle (ActivityLog) und ich möchte es eine PK haben, die auch eine FK zu einer anderen Tabelle (Benutzer) ist.Spring und JPA 2.0 - Single-Value Primärschlüssel durch OneToOne
Es scheint eine gemeinsame Sache zu sein, und ich habe versucht, dieses Wikibook Primary Keys through OneToOne and ManyToOne Relationships zu folgen. Das Beispiel dort beinhaltete einen zusammengesetzten Schlüssel. Ich brauche nur einen primitiven Schlüssel, so landete ich mit:
@Entity
public class User {
@Id
private Long id;
// other stuff
}
@Entity
public class ActivityLog {
@Id
@OneToOne(optional = false)
@JoinColumn(name="user_id", referencedColumnName="id")
private User user;
// other stuff
}
Leider bekomme ich:
Caused by: java.lang.IllegalArgumentException: This class [class com.example.ActivityLog] does not define an IdClass
at org.hibernate.metamodel.internal.AbstractIdentifiableType.getIdClassAttributes(AbstractIdentifiableType.java:183)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation$IdMetadata.<init>(JpaMetamodelEntityInformation.java:253)
Ich versuchte ActivityLog mit Anmerkungen versehen mit:
@IdClass(Long.class)
(obwohl aus was ich verstehe, ist nur für zusammengesetzte Schlüssel anwendbar), aber ich bekomme genau den gleichen Fehler.
Ist mein Fall anders als auf dem erwähnten Wikibook?
Ist die Feder hier fehlerhaft? (Wie in this question? vorgeschlagen (keine akzeptierten Antworten)).
https://docs.jboss.org/hibernate/orm/current/userguide/html_single/ Hibernate_User_Guide.html # IDs abgeleitet –
Danke @JBNizet. '@ MapsId' war der richtige Weg! – tasza