2013-03-15 5 views
56

データベーステーブルのモデルクラスを作成するために、hibernateアノテーションを使用しようとしています。hibernateアノテーションを使用して外部キー制約を作成するにはどうすればよいですか?

私はそれぞれ主キーUserとQuestionを持つ2つのテーブルを持っています。

@Entity 
@Table(name="USER") 
public class User 
{ 
    @Id 
    @Column(name="user_id") 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    @Column(name="username") 
    private String username; 

    // getter and setter 
} 

質問表。

@Entity 
@Table(name="QUESTION") 
public class Questions extends BaseEntity{ 

    @Id 
    @Column(name="question_id") 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 

    @Column(name="question_text") 
    private String question_text; 

    // getter and setter 

} 

私は上記の2つのテーブルからの外部キーとしてuserIdとquestionIdを持つもう1つのテーブルUserAnswerを持っています。

しかし、これらの制約をUserAnswerテーブルでどのように参照できるかわかりません。

@Entity 
@Table(name="UserAnswer ") 
public class UserAnswer 
{ 

    @Column(name="user_id") 
    private User user; 

    //@ManyToMany 
    @Column(name="question_id") 
    private Questions questions ; 

    @Column(name="response") 
    private String response; 

    //getter and setter 
} 

私はこれを達成助けてください? ありがとうございます。

答えて

51

@Columnは適切な注釈ではありません。ユーザーまたは質問全体を列に格納したくない場合。エンティティ間の関連付けを作成する必要があります。まず、Questionsの名前をQuestionに変更します。インスタンスは1つの質問を表し、複数の質問は表しません。次に、関連付けを作成します。

@Entity 
@Table(name = "UserAnswer") 
public class UserAnswer { 

    // this entity needs an ID: 
    @Id 
    @Column(name="useranswer_id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "user_id") 
    private User user; 

    @ManyToOne 
    @JoinColumn(name = "question_id") 
    private Question question; 

    @Column(name = "response") 
    private String response; 

    //getter and setter 
} 

Hibernate documentationについて説明しています。それを読んで。また、アノテーションのjavadocも読んでください。

+0

返信いただきありがとうございます。 useranswer_idとしてテーブルに新しい列を作成する必要がありますか?他の2つのIDを合成キーとして作ることは可能ですか? – vikiiii

+2

可能ですが、デザインが苦しく、使いにくく、非効率です。正しいことを行い、すべてのエンティティに自動生成された単一列のIDを割り当てます。 –

+0

@JB_Nizet IDの列をエンティティに追加しても構いません。しかし、私もテーブルに列を追加する必要がありますか?私はOracleデータベースを意味する。 – vikiiii

1

アノテーションは、他のエンティティから参照されているそのプロパティまたはクラスのフィールドの上に使用できます。

関連する問題