【问题标题】:Hibernate Envers: usage of 'in' in the queryHibernate Envers:在查询中使用“in”
【发布时间】:2012-10-09 00:58:11
【问题描述】:

我有三个表ABAB。 AB表是关系表。所以AB_AUD 表有abID 作为PK,aIdbID,修订信息。 我有“bIds”列表,并希望使用该列表从AB_AUD 表中检索审计数据。我的代码块是

AuditQuery query = auditReader.createQuery()
    .forRevisionsOfEntity(AB.class, false, true)
    .add(AuditEntity.property("bId").in(bIds))
    .addOrder(AuditEntity.revisionNumber().desc());

这会引发异常:无法解析 bId 的属性。甚至我尝试将单个bId 等同于检索单个bId 的审计数据,该exception 抛出相同的exception。 我想知道代码中是否有任何错误。现在我正在做一个 for 循环来检索这样的数据:

for (B b : listofB's)
{
    AuditQuery query = auditReader.createQuery()
        .forRevisionsOfEntity(AB.class, false, true)
        .add(AuditEntity.property("b").eq(b))
        .addOrder(AuditEntity.revisionNumber().desc());
}

每个 B 都运行 sql query,这不是一个好方法。

【问题讨论】:

    标签: hibernate hibernate-envers


    【解决方案1】:

    如果您的属性名称是b,那么您为什么在查询中使用bId。更新查询以使用b,如下所示:

                .forRevisionsOfEntity(AB.class, false, true)
                 .add(AuditEntity.property("b").in(istofB's))
                 .addOrder(AuditEntity.revisionNumber().desc());
    

    这应该可行。

    【讨论】:

    • AuditEntity.property("b").in(istofB's) 不起作用,我觉得将属性 b 与对象列表进行比较会导致错误。根据bId生成sql查询也应该检索审计数据,因为bId是AB表中的列。请指教。
    • 听起来不对。您是否仍然收到错误提示属性b undefined?
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 2011-07-03
    • 2020-09-12
    • 1970-01-01
    • 2023-03-20
    • 2013-05-24
    • 2011-07-29
    • 2019-04-01
    相关资源
    最近更新 更多