7

在 EclipseLink 中使用 @AdditionalCriteria 很容易,例如过滤掉软删除的实体,但是在执行特定查询之前有什么方法可以暂时禁用它?

4

3 回答 3

6

是的,这是可能的,有一个简单的解决方法。我像这样指定了@AdditionalCriteria 注释:

@AdditionalCriteria(":disableDeletedFeature = 1 or this.isDeleted = false")

并为 persistence.xml 中的禁用标志指定了默认属性值:

<property name="disableDeletedFeature" value="0"/>

因此默认情况下启用过滤,但您可以在 EntityManager 级别轻松禁用它,如下所示:

entityManager.setProperty("disableDeletedFeature", 1);

对我来说一切正常,希望对我有帮助!

于 2013-04-11T10:42:55.660 回答
1

如果您使用本机 SQL 查询,则不会附加条件。

否则,没有简单的方法来禁用它被附加,除非您创建另一个持久性单元或另一个没有附加条件的类。

您可以做的一件事是在基于会话属性的条件中放置一个 OR 条件,然后当您将此属性设置为 true 时,您可以禁用该条件。

您可以记录增强请求以添加不将其附加到查询的选项。

于 2013-04-08T14:18:10.367 回答
0

我使用eclipselink 2.4.1。它仅与引号一起用于属性值:

@AdditionalCriteria(":disableDeletedFeature = '1' or this.isDeleted = false")

和这里:

entityManager.setProperty("disableDeletedFeature", '1');
于 2015-02-19T11:00:44.490 回答