【问题标题】:Hibernate: Query only a few properties of the associated entity on a many-to-one associationHibernate:在多对一关联中仅查询关联实体的几个属性
【发布时间】:2014-07-03 13:42:27
【问题描述】:

我有两个实体:A( x, y )B( r, s, A )

x, y, rs 是实体的属性,而实体 B 具有多对一 与实体 A 的关联。

我想获取我的所有 B 实体。所以,我这样做:

List<B> myBs = session
    .createCriteria(B.class)
    .list();

由于 BA 关联是惰性的,因此每个 BA 仅按需加载.但是,我不想要这个。所以,我愿意:

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


【解决方案1】:

没有亲自尝试过。但我相信这会奏效。

session.createCriteria(B.class)
    .setProjection(Projections.projectionList()
        .add(Projections.property("r").as("r"))
        .add(Projections.property("s").as("s"))
        .add(Projections.property("a.x").as("x")))
    .list(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    相关资源
    最近更新 更多