gpt4 book ai didi

java - 如何使用 JPA2 注释将结果限制为 Activity 记录

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:32 26 4
gpt4 key购买 nike

我当前的应用程序是一个 EJB 2.x 系统,到处都使用 Entity Beans,带有 CMR 和 CMP。我希望用标准 JPA 替换持久层,但我无法确定以下是否可行。

当请求删除记录时,系统通过在表上设置一列VOID_IND = 'y'来实现逻辑删除。系统中的当前处理逻辑将使用 CMR 从子表中检索所有项目,然后循环并丢弃带有 VOID_IND = 'y' 的项目,并且只返回给客户端,其中 VOID_IND = 'n'.

这对我来说似乎效率很低,我宁愿不首先返回这些“已删除”的记录。不幸的是,我只能找到特定于实现的注释来帮助解决这个问题。

作为@Where 和 EclipseLink @AdditionalCriteria hibernate

但我想知道是否有专门用于 JPA 的标准注释?

最佳答案

不,不幸的是没有标准过滤器。

我认为您应该创建一个查询。

JPA 包括 JPQL 和 Criteria API,但我强烈建议查看 QueryDSL使用类型安全的自动生成的“查询”类非常好用。

这是 QueryDSL 中的一个例子;没有那么多代码。

  • parent 是父对象。
  • qChild 有点像 QueryDSL 魔法。它是对子项自动生成的查询类中字段的静态导入。实际上,这真的很好。

Query q = new Query();

List<Child> active = q.from(qChild)
.where(qChild.parent.eq(parent), qChild.voidInd.eq('Y'))
.list(qChild);

或者

q.from(qChild);
q.where(qChild.parent.eq(parent));
q.where(qChild.voidInd.eq('Y'));
List<Child> active = q.list(qChild);

关于java - 如何使用 JPA2 注释将结果限制为 Activity 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com