java Hibernate标准获取关联实体的列表,而不是父实体的列表
我有两个具有单向@OneToMany映射的实体:
@Entity
@Table(name = "table1")
public class A {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
Integer pk;
String name;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "a_pk", nullable = false)
@Where(clause = "is_deleted = 0")
List<B> children;
}
@Entity
@Table(name = "table2")
public class B {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
Integer pk;
String content;
@Column(name = "is_deleted",nullable=false)
@NotNull
boolean deleted = false;
}
我想获得所有B实体的列表,它们是符合限制的a实体的子实体
Criteria c = session.createCriteria(A.class)
.add(Restriction.like("name", "Test%"))
.createAlias("children","b");
???
这就是我遇到的问题:c.list()将返回一个对象列表。我不在乎A,我想要B。我如何使用Hibernate标准/投影来实现它如果重要的话,我使用Hibernate 4.2.12
在这种简化的情况下,急切地去拿是有意义的;在真实的情况下,有四个一对一的单向关联链,我想让所有(或者更好的是,一些)孩子都知道根id;但我不想加载所有的中间内容(这不是必需的,而且即使join获取四个表也能工作,这也太糟糕了)。此外,简单地找到根并跟踪惰性关联是N+1问题升级的一个明显例子
作为一个附带问题,Hibernate标准是否满足实体/属性@Where限制
# 1 楼答案
你可以用投影得到“b”的列表。像这样:
之后,当您尝试使用
c.list()
获取结果时,它将返回一个B列表。 我希望这有帮助# 2 楼答案
所以,是的,我最终还是使用了HQL。没什么特别的