所以我在这两个表之间有一个ManyToOne
关系:
@Entity
public class Parent{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy="parent", orphanRemoval=true)
@OrderBy(clause="id DESC")
private List<Children> childs= new ArrayList<Children>();
}
@Entity
public class Children{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
private Parent parent;
}
所以我想做的是在一个查询中得到包含它的孩子的List<Parent>
,我的意思是我不想使用延迟加载,所以我想把孩子加入到父母的一个查询并获取父母列表
如何使用hibernate的Criteria或HQL实现这一目标?
我使用过这个查询,但它没有给我我想要的东西:
List<Parent> list = session.createQuery("SELECT p FROM Parent p JOIN p.childs c ORDER BY p.id DESC").list();
这给了我List<Parent>
但当我循环通过它时,当父母有多个孩子时,我得到重复的父母!!
答案 0 :(得分:0)
您不必显式使用hibernate-criteria(通常用于编写自定义查询),您可以使用GenericRepositoryHibernate中的标准OOTB方法。
需要注意的是,您创建的父bean必须具有child类型的子属性(而不是string或int)。你已经完成了。这种映射很难绑定。
基本上这就是全部。如果您遇到一些问题 - 提供日志片段和放大器解释问题本身。
答案 1 :(得分:0)
尝试加入FETCH :
List<Parent> list = session.createQuery("SELECT p FROM Parent p JOIN FETCH p.childs c ORDER BY p.id DESC").list();