2017-12-30 17 views
0

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)).

+0

https://docs.jboss.org/hibernate/orm/current/userguide/html_single/ Hibernate_User_Guide.html # IDs abgeleitet –

+0

Danke @JBNizet. '@ MapsId' war der richtige Weg! – tasza

Antwort

0

sollten Diese helfen: Btw

@Entity 
public class ActivityLog { 

    @Id 
    @Column(name = "user_id") 
    private Long id; 

    @OneToOne(optional = false) 
    @JoinColumn(name="user_id", referencedColumnName="id") 
    private User user; 

    // other stuff 
} 

. Ich würde erwarten, dass Sie mehr Logs pro Benutzer benötigen, also würden Sie wahrscheinlich sowieso eine zusätzliche (generierte) ID benötigen ...

Verwandte Themen