Ich versuche, Hibernate-Annotation zum Schreiben einer Modellklasse für meine Datenbanktabellen zu verwenden.
Ich habe zwei Tabellen mit jeweils einem Primärschlüssel Benutzer und Frage.
@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
}
Fragentabelle.
@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
}
Und ich habe eine weitere Tabelle, UserAnswer, die userId und questionId als Fremdschlüssel aus den beiden obigen Tabellen enthält.
Ich kann jedoch nicht feststellen, wie ich auf diese Einschränkungen in der UserAnswer-Tabelle verweisen kann.
@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
}
Wie kann ich das erreichen?
@Column
ist nicht die passende Anmerkung. Sie möchten nicht einen ganzen Benutzer oder eine ganze Frage in einer Spalte speichern. Sie möchten eine Zuordnung zwischen den Entitäten erstellen. Benennen Sie zunächst Questions
in Question
um, da eine Instanz eine einzelne Frage darstellt und nicht mehrere. Dann erstelle die Assoziation:
@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
}
Die Ruhezustand Dokumentation erklärt das. Lies es. Lesen Sie auch den Javadoc der Anmerkungen.
Es gibt viele Antworten und alle sind auch richtig. Leider hat keiner von ihnen eine klare Erklärung.
Das Folgende funktioniert auch für eine Nicht-Primärschlüsselzuordnung.
Angenommen, wir haben die übergeordnete Tabelle A mit Spalte 1 und eine weitere Tabelle B mit Spalte 2, die auf Spalte 1 verweist:
@ManyToOne
@JoinColumn(name = "TableBColumn", referencedColumnName = "TableAColumn")
private TableA session_UserName;
@ManyToOne
@JoinColumn(name = "bok_aut_id", referencedColumnName = "aut_id")
private Author bok_aut_id;
@JoinColumn(name="reference_column_name")
Annotation kann über der Eigenschaft oder dem Feld der Klasse verwendet werden, auf die von einer anderen Entität verwiesen wird.