2015-05-10 244 views
0

我想實現OnetoMany關係兩個表的學生和證書。我有兩個類,Student和Certificates,它們具有從Student類到Certificates類的OnetoMany關係。休眠OnetoMany的關係

學生類別:

@Entity 
@Table(name = "student") 
public class Student implements Serializable{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name = "id") 
    private Integer id; 
    @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="student") 
    private List<Certificats> listCertificats; 
    // Getters and Setters 

Certificats類:

@Entity 
    @Table(name = "certificates") 
    public class Certificates implements Serializable{ 

     @Id 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     @Column(name = "id") 
     private Integer id; 
     @ManyToOne 
     @JoinColumn(name="student_id") 
     private Student student;  
     // Getters and Setters 

我DAO類必須從數據庫中獲取數據的方法:

@SuppressWarnings("unchecked") 
    public List<Students> listStudents() { 

     List<Students> studentList; 

     studentList= sessionFactory.getCurrentSession().createQuery("from Student").list(); 

     return studentList; 
    } 

現在,當我運行這個方法,List類的Student類中的listCertificats的值始終爲空。但是,我在Student類中獲得了id字段的值。我在這裏做錯了什麼?我查了一些關於Hibernate OnetoMany關係的教程,他們用我實現的相同方式描述。任何將非常感激。

+0

我假設你創建測試數據。您是否確保在保存之前建立兩個實體之間的關係? (student.getListCertificates()。add(certificate); certificate.setStudent(student)),否則hibernate根據內部會話狀態可能會發生意外情況。 –

+0

我比較新。你能詳細解釋一下嗎? –

+0

你需要插入數據到數據庫來閱讀的東西,我的意思是代碼。您使用雙向映射。如果使用不當,可能會導致故障 –

回答

0

FetchType.lazy意味着你將不會看到你的子實體的數據,直到你訪問它們的特定屬性。

請指明你什麼時候看到null?即使你訪問它們,你是否看到空白?

+0

我沒有cascade = CascadeType.ALL,fetch = FetchType.LAZY第一次。我添加了這些嘗試以不同的方式,每次我看到空。要指定,我嘗試訪問特定字段時看到空。我知道我的代碼或設置存在問題。我只是想明白那是什麼。我在數據庫中的數據有一個簡單的一對多關係。知道是否需要採用不同的方法從這些表中獲取數據也是有幫助的。我想如果我使用onetomany關係,它會根據表之間的關係自動從兩個表中提取數據。 –