我有一个像这样的示例代码 -
@Entity
@Table(name = "employee")
@Where(clause = "active IS TRUE")
public class Employee{
}
这将获取 active = true或1 的员工表的所有记录。在某些情况下,可能需要我加载 active = false或0 的记录。
如果我将代码编写为FROM Employee emp WHERE emp.active IS FALSE
,但生成的查询包含HQL和Annotations中给出的条件。
因此,预期的结果不会到来。无论如何都要覆盖这个预定义的@Where
定义的实体?
答案 0 :(得分:1)
AFAIK你不能在课堂上覆盖它,因为如果你看一下 @Where documentation ,你会看到这个界面有注释@Retention(value=RUNTIME)
所以它有{ {1}} RUNTIME
您可以在 RetentionPolicy documentation 中看到:
<强> RUNTIME:强> 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。
强制RetentionPolicy
注释由编译器记录在类文件中,并在运行时由VM保留,因此它将在整个类中应用。
答案 1 :(得分:1)
我知道它的问题太老了,但我面临着同样的问题,并认为我应该分享我的解决方法。
完全同意@cнŝdk的答案,因为您不能覆盖它,但是可以通过如下定义@Where
来忽略nativeQuery
子句:
@Query(value = "Select * from customer where company_id = ?1", nativeQuery = true) List<Customer> findByCompanyIdIgnoringEntityWhere(Long companyId);
@Query批注中的SQL必须指向表的名称和字段的名称(而不是实体的名称)。