2017-05-13 30 views
0

ユーザーとコメントの関係は多岐にわたります。それは動作しますが、ユーザーは1つのコメントしか作成できません。キーをユニークにする別の生成されたIDを追加する必要があります。Spring jpa data jpa IdClassを使用した3つの主キーとの合成

Commentクラス

@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 

CommentPK

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

    private Long game; 

    private Long user; }//setters and getters 

エラーがないことのすべては、本当に大きいです

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

生成されたIDなしで正常に動作していました。

+0

なぜですか?なぜあなたはそのような複雑な生活をしていますか?なぜあなたはエンティティのために、単一列の純粋に技術的な自動生成された主キーを使用しないのですか? –

+0

私はゲームのコメントを取得する必要がありますまた、ユーザーのコメントを得ることができますか?ゲームが削除されたときにコメントも削除されました –

+0

それはエンティティの** ID **にユーザとゲームを置く理由ではありません。それらをIDでなくエンティティの一部にする。 –

答えて

0

私のコードでは、idClassとエンティティの型が一致しないというエラーメッセージが表示されています。

idclassにはLong型、Long型、Long型がありますが、エンティティにはLong、Game、Userがあります。 は、おそらく次のよう

@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; 

を試してみて、エンティティのプロパティに応じてIdClass内のフィールドの名前を変更します。

関連する問題