2017-05-13 10 views
0

Ich habe viele zu viele Beziehung zwischen Benutzer und Kommentar. Es funktioniert aber so, dass der Benutzer nur einen Kommentar abgeben kann. Ich muss eine andere generierte ID hinzufügen, die den Schlüssel einzigartig macht.Spring jpa Daten jpa Composite mit 3 Primärschlüssel mit IdClass

Der Kommentar Klasse

@Entity 
@IdClass(CommentPK.class) 
public class Comment { 
    @Id 
    private Long id; 


    @Id 
    @ManyToOne 
    @JoinColumn(name = "gameID" ,referencedColumnName = "id") 
    private Game game; 

    @Id 
    @ManyToOne 
    @JoinColumn(name = "userID",referencedColumnName = "id") 
    private User user; 

    private String Text; 

    public Comment() { 
     super(); 
     this.id = null; 
     this.game = null; 
     this.user = null; 
     Text = null; 
    } 
    public Comment(Game game, User user, String text) { 
     this(); 
     this.id = null; 
     this.game = game; 
     this.user = user; 
     Text = text; 
    } 
    public Comment(Game game, String text) { 
     this(); 
     this.id = null; 
     this.game = game; 
     this.Text = text; 
    } }//setters and getters 

Die CommentPK

public class CommentPK implements Serializable { 
@GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private Long game; 

    private Long user; }//setters and getters 

der Fehler nicht alles davon ist wirklich groß

Can not set java.lang.Long field guru.springframework.domain.CommentPK.game to guru.springframework.domain.TF_Game 

Es funktionierte gut ohne die generierte ID.

+0

Warum? Warum machst du dein Leben so komplex? Warum verwenden Sie für Ihre Entität keinen rein technischen, automatisch generierten Primärschlüssel? –

+0

Ich muss den Kommentar für das Spiel erhalten und kann auch den Kommentar des Benutzers erhalten? Auch wenn das Spiel gelöscht wurde, werden die Kommentare ebenfalls gelöscht. –

+0

Das ist kein Grund, den Benutzer und das Spiel in die ** ID ** der Entität zu bringen. Machen Sie sie Teil der Entität, nicht ihrer ID. –

Antwort

0

Wie ich in Ihrem Code sehe die Fehlermeldung besagt, dass die Typen nicht zwischen IDClass und Entität übereinstimmen.

Wie Sie sehen, hat Ihre ID-Klasse Long, Long, Long als Typen, während Ihre Entität Long, Game, User hat. vielleicht versuchen, die folgenden

@Entity 
@IdClass(CommentPK.class) 
public class Comment { 
@Id 
private Long id; 

@Id 
@Column(name="gameID") 
private Long gameId; 

@ManyToOne 
@JoinColumn(name = "gameID" ,referencedColumnName = "id", insertable=false, updatable=false) 
private Game game; 

@Id 
@Column(name="userID") 
private Long userId; 

@ManyToOne 
@JoinColumn(name = "userID",referencedColumnName = "id", insertable=false, updatable=false) 
private User user; 

private String Text; 

und benennen Sie die Felder in IdClass entsprechend die Eigenschaften in der Einheit.

Verwandte Themen