2013-03-15 14 views
56

Ich versuche Hibernate Annotation zum Schreiben einer Modellklasse für meine Datenbanktabellen zu verwenden.Wie kann ich eine Fremdschlüsseleinschränkung mithilfe von Hibernate-Anmerkungen erstellen?

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 
} 

Fragetabelle.

@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 noch eine Tabelle, UserAnswer, die Benutzer-ID und QuestionID als Fremdschlüssel aus den obigen zwei Tabellen hat.

Ich kann jedoch nicht finden, wie ich diese Einschränkungen in der Tabelle UserAnswer referenzieren 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 
} 

Bitte helfen Sie mir, dies zu erreichen? Vielen Dank im Voraus.

Antwort

51

@Column ist nicht die entsprechende Anmerkung. Sie möchten nicht einen ganzen Benutzer oder eine Frage in einer Spalte speichern. Sie möchten eine Verknüpfung zwischen den Entitäten erstellen. Beginnen Sie mit der Umbenennung von Questions in Question, da eine Instanz eine einzelne Frage darstellt und nicht mehrere. Dann erstellen Sie die Zuordnung:

Die Hibernate documentation erklärt, dass. Lies es. Und lies auch das Javadoc der Annotationen.

+0

Vielen Dank für die Antwort. Ist es notwendig, eine neue Spalte in der Tabelle als userswer_id anzulegen? Ist es möglich, wenn ich die anderen zwei IDs als zusammengesetzte Schlüssel machen kann? – vikiiii

+2

Es ist möglich, aber es ist schlechtes Design, schmerzhaft, schwer zu benutzen und ineffizient. Tun Sie das Richtige und weisen Sie allen Ihren Entitäten eine automatisch generierte Einspalten-ID zu. –

+0

@JB_Nizet Ich habe nichts dagegen, eine ID-Spalte zu einer Entität hinzuzufügen. Muss ich aber auch eine Spalte in der Tabelle hinzufügen? Ich meine Oracle-Datenbank. – vikiiii

1

Die Annotation @Join column(name="reference_column_name") kann über der Eigenschaft oder dem Feld der Klasse verwendet werden, auf die von einer anderen Entität verwiesen wird.

Verwandte Themen