Как создать ограничение внешнего ключа с помощью аннотаций спящего режима?
Я пытаюсь использовать аннотацию 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
}
Пожалуйста, помогите мне достичь этого?
Спасибо заранее.
Ответы
Ответ 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")
может быть использована выше этого свойства или поля класса, на который ссылается какой-либо другой объект.