Подтвердить что ты не робот

Как создать ограничение внешнего ключа с помощью аннотаций спящего режима?

Я пытаюсь использовать аннотацию hibernate для написания класса модели для моих таблиц базы данных.

У меня есть две таблицы, каждая из которых имеет первичный ключ пользователя и вопрос.

@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

}

И у меня есть еще одна таблица UserAnswer, которая имеет 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 
}

Пожалуйста, помогите мне достичь этого? Спасибо заранее.

4b9b3361

Ответ 1

@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 аннотаций.

Ответ 2

Аннотация @Join column(name="reference_column_name") может быть использована выше этого свойства или поля класса, на который ссылается какой-либо другой объект.