在Hibernate 4.3.4中覆盖@Where子句条件

joy*_*-cs 9 java annotations hibernate

我有一个像这样的示例代码片 -

@Entity
@Table(name = "employee")
@Where(clause = "active IS TRUE")
public class Employee{
}
Run Code Online (Sandbox Code Playgroud)

这将获取具有active = true或1employee表的所有记录.在某些情况下,可能需要我要加载active = false或0的记录.

如果我编写我的代码,FROM Employee emp WHERE emp.active IS FALSE但生成的查询包含HQL和Annotations中给出的条件.

因此,预期的结果不会到来.无论如何都要覆盖这个预定@Where义的实体定义?

Mal*_*hah 9

我知道这个问题太老了,但我面临着同样的问题,并认为我应该分享我的解决方法。

\n\n

完全同意 @c\xd0\xbd\xc5\x9ddk 答案,因为您无法覆盖,但可以通过定义如下来忽略@Where子句:nativeQuery

\n\n

@Query(value = "Select * from customer where company_id = ?1", nativeQuery = true) List<Customer> findByCompanyIdIgnoringEntityWhere(Long companyId);\n

\n@Query 注解中的 SQL 必须指向表的名称和字段的名称(而不是实体的名称)。

\n


cнŝ*_*ŝdk 2

AFAIK 你不能在你的类中重写它,因为如果你看一下@Where 文档,你会看到这个接口被注释@Retention(value=RUNTIME),所以它有RUNTIMEa并且你可以在RetentionPolicy 文档RetentionPolicy中看到:

RUNTIME: 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。

这迫使@Where编译器将注释记录在类文件中,并在运行时由虚拟机保留,因此它将应用于整个类。