2013-09-25 59 views
1

我有一个通用条件查询,它会返回相同的记录。我认为我的学生保存方法有问题。这是我的保存方法;休眠条件示例查询获取多条记录

Student student = new Student(); 
    student.setId(Utility.generateUUID()); 
    student.setClassroom(selectedClassroom); 
    student.setUrl(urlAddress); 
    genericService.save(student); 

当我试图从数据表,它返回3教室对象,该对象是相同的,但只有一个在课堂表记录所有教室。问题是有3个学生记录哪个教室引用了这个课堂记录。

我的标准查询;

@Transactional(readOnly = true) 
public <T> List<T> getByTemplate(T templateEntity) { 
    Criteria criteria = getCurrentSession().createCriteria(templateEntity.getClass()); 
    criteria.add(Example.create(templateEntity)); 
    return criteria.list(); 
} 

实体;

public class Classroom{ 

    .... 
    @OneToMany(mappedBy = "classroom", fetch = FetchType.EAGER) 
    private List<Student> studentList; 
} 


public class Student{ 

    @JoinColumn(name = "classroom", referencedColumnName = "id") 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Classroom classroom; 
} 
+0

你为什么要手动设置'student'' id,你不让'Hibernate'为你管理它? – Atropo

回答

1

尝试以下添加到您的标准:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

这将检索不同的实体课堂甚至因子评分内连接选择将检索三行(每个用户一个)。

+1

将属性hibernate.show_sql属性设置为true会显示执行的sql查询。您将看到由Example.create()构建的INNER JOIN子句。 –

+0

@hellzone你解决了你的问题吗? –

+0

是的,它解决了我的问题。谢谢。 – hellzone