【发布时间】:2014-07-03 13:42:27
【问题描述】:
我有两个实体:A( x, y ) 和 B( r, s, A )
x, y, r 和 s 是实体的属性,而实体 B 具有多对一 与实体 A 的关联。
我想获取我的所有 B 实体。所以,我这样做:
List<B> myBs = session
.createCriteria(B.class)
.list();
由于 B 到 A 关联是惰性的,因此每个 B 的 A 仅按需加载.但是,我不想要这个。所以,我愿意:
List<B> myBs = session
.createCriteria(B.class)
.setFetchMode("A", FetchMode.JOIN)
.list();
现在,我一次性获得所有 Bs 和它们各自的 As。每个 A 都有其所有属性(x, y)。但是,我只想要 x。
我试过了:
List<B> myBs = session
.createCriteria(B.class)
.createCriteria("A")
.setProjection(Projections.alias(Projections.property("x"), "x"))
.setResultTransformer(new AliasToBeanResultTransformer(A.class))
.list();
并得到错误:QueryException: could not resolve property: x of: B。显然,结果转换器不是应用于 A,而是应用于 B。
我的问题是:我如何.list()我的 Bs,获取他们各自的 As,只为每个 x 带来属性 x强>一个?
【问题讨论】:
-
使用 createAlias("A", "a") 代替 createCriteria("A") 并使用别名 'a' 调用 A 类属性。
标签: hibernate projection many-to-one