81

データベース テーブルのモデル クラスを作成するために Hibernate アノテーションを使用しようとしています。

2 つのテーブルがあり、それぞれに主キー User と Question があります。

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

そして、もう 1 つのテーブル UserAnswer があります。このテーブルには、上記の 2 つのテーブルの外部キーとして userId と questionId があります。

しかし、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
}

どうすればこれを達成できますか?

4

3 に答える 3

75

@Columnは適切な注釈ではありません。ユーザー全体または質問全体を列に保存したくありません。エンティティ間の関連付けを作成します。インスタンスは複数の質問ではなく単一の質問を表すため、名前Questionsをに変更することから始めます。Question次に、関連付けを作成します。

@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のドキュメントはそれを説明しています。それを読んで。また、注釈の javadoc もお読みください。

于 2013-03-15T07:31:36.203 に答える