2016-08-22 4 views
0

私は学生がいて、各学生を家にマッピングしたいとします。Hibernate relational annotations

言うエンティティ1:Student_masterテーブルは次のように記載されている(STUDENT_ID(PRIMARY_KEY)、標準グレード、年齢)

言うエンティティ2:house_masterテーブル(house_id(PRIMARY_KEY)、house_color_house_capacity)

として記載されていますSay Entity 3:student_house_mappingテーブルは(student_house_id、Student_id(foreign_key)、house_id(foreign_key))です。

は、今ここで私は

は、例えば、私は今student_house_mappingのテーブルを介して私はhouse_idを取得し、それを私は特定のhouse_masterオブジェクトを取得し、学生を取得し、各学生をトラバースし、その家の詳細を取得する必要があります。休止状態で、これは(例:一から一、1に多くの)関係を用いて達成することができる方法

私はすべてのエンティティのためのクラスを持っている場合、注釈は、私が使用し

答えて

1
を定義する必要があります

最初の文章を読むと、各生徒にA Houseがあると述べたように、OneToOneと言うことができます。

シナリオを考えてみると、各学生は多くの家を持つことができます。 次に、関係はOneToManyになり、OneToMany House(POJOクラス)を持つ生徒との2つのテーブルの生徒と家でのみ達成されます。

あなたは、家も多くの学生に属していると思うならば。 次に、あなたの現在のテーブルstudents、house、およびstudents_houseテーブル(Bridgeテーブル)を使用してManyToManyに行く必要があります。

Student.java

@Entity 
@Table(name="students") 
public class Student { 
private int studentId;// set the column name with @JoinColumn annotation if you want 
private int standard;// to be different from the variable name 
private int grade; 
private int age; 
@OneToMany 
@JoinTable(name="students_houses", 
    joinColumns = @JoinColumn(name="studentId"), 
    inverseJoinColumns = @JoinColumn(name="houseId")) 
private List<House> houses; 
// getters and setters 
} 

House.java

@Entity 
@Table(name="houses") 
public class House { 
private int houseId; 
private String color; 
private int houseCapacity; 
@OneToMany 
@JoinTable(name="students_houses", 
    joinColumns = @JoinColumn(name="houseId"), 
    inverseJoinColumns = @JoinColumn(name="studentId")) 
private List<Student> students; 
// getters and setters 
} 

あなたはあなたができる、両方のテーブルの外部キー以外の追加フィールドを持つカスタムブリッジテーブルを作成したい場合BridgeクラスでOneToManyを持つ各クラスでカスタムのBridgeクラスを作成します。そして、両方のクラスでManyToOneを持つBridgeクラス。

あなたはさらなる例

0

一つの方法は、@JoinTable注釈されています。 簡単な例:

@ManyToMany 
@JoinTable(name = "student_house_mapping") 
private List<Student> students; 

Hibernateは正しいが、それ自身の上の列に参加見つけることができない場合には(時には、このような場合は)あなたも@JoinTable

joinColumns = {@JoinColumn(...)}, 
inverseJoinColumns = {@JoinColumn(...)}) 

パラメータ

0
Assuming Student and House has ManyToMany relationship, you can design something like this: 

    package com.raf.prac.domain; 

    import javax.persistence.*; 
    import java.util.HashSet; 
    import java.util.Set; 


    @Entity 
    @Table(name = "student") 
    public class Student { 
     @Id 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     private int student_id; 
     @Column(name = "standard") 
     String standard; 
     @Column(name = "grade") 
     String grade; 
     @Column(name = "age") 
     int age; 

     @ManyToMany 
     @JoinTable(name = "student_house_mapping", 
       joinColumns = {@JoinColumn(name = "student_id")}, 
       inverseJoinColumns = {@JoinColumn(name = "house_id")}) 
     private Set<House> houses = new HashSet(); 

     public Student() { 
     } 

     public String getStandard() { 
      return standard; 
     } 

     public void setStandard(String standard) { 
      this.standard = standard; 
     } 

     public String getGrade() { 
      return grade; 
     } 

     public void setGrade(String grade) { 
      this.grade = grade; 
     } 

     public int getAge() { 
      return age; 
     } 

     public void setAge(int age) { 
      this.age = age; 
     } 

     public Set<House> getHouses() { 
      return houses; 
     } 

     public void setHouses(Set<House> houses) { 
      this.houses = houses; 
     } 
    } 

package com.raf.prac.domain; 

import javax.persistence.*; 
import java.util.HashSet; 
import java.util.Set; 

/** 
* Created by ar on 22/08/2016. 
*/ 
@Entity 
@Table(name = "house") 
public class House { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int house_id; 
    @Column(name = "house_color") 
    private String house_color; 
    @Column(name = "house_capacity") 
    private int house_capacity; 

    @ManyToMany(mappedBy = "houses") 
    Set<Student> students = new HashSet(); 

    public House() { 
    } 

    public int getHouse_id() { 
     return house_id; 
    } 

    public void setHouse_id(int house_id) { 
     this.house_id = house_id; 
    } 

    public String getHouse_color() { 
     return house_color; 
    } 

    public void setHouse_color(String house_color) { 
     this.house_color = house_color; 
    } 

    public int getHouse_capacity() { 
     return house_capacity; 
    } 

    public void setHouse_capacity(int house_capacity) { 
     this.house_capacity = house_capacity; 
    } 

    public Set<Student> getStudents() { 
     return students; 
    } 

    public void setStudents(Set<Student> students) { 
     this.students = students; 
    } 
} 
ためStackOverflowのドキュメントを参照することができます
関連する問題