2015-05-10 169 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关系,它会根据表之间的关系自动从两个表中提取数据。 –