with example ejemplo anotaciones annotation java hibernate hibernate-mapping hibernate-annotations

java - example - hibernate-annotations maven



¿Cómo puedo crear una restricción de clave externa usando anotaciones de hibernación? (2)

Estoy intentando usar la anotación de hibernación para escribir una clase de modelo para las tablas de mi base de datos.

Tengo dos tablas, cada una con una clave principal Usuario y Pregunta.

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

Tabla de preguntas.

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

Y tengo una tabla más, UserAnswer, que tiene userId y questionId como claves foráneas de las dos tablas anteriores.

Pero no puedo encontrar cómo puedo hacer referencia a estas restricciones en la tabla 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 }

Por favor, ayúdame a lograr esto? Gracias por adelantado.


La @Join column(name="reference_column_name") se puede usar sobre esa propiedad o campo de clase a la que se hace referencia desde alguna otra entidad.


@Column no es la anotación adecuada. No desea almacenar un usuario o una pregunta completos en una columna. Desea crear una asociación entre las entidades. Comience cambiando el nombre de las Questions a la Question , ya que una instancia representa una sola pregunta, y no varias. Luego crea la asociación:

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

La documentación de Hibernate explica eso. Léelo. Y también lea el javadoc de las anotaciones.