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或1的employee表的所有记录.在某些情况下,可能需要我要加载active = false或0的记录.
如果我编写我的代码,FROM Employee emp WHERE emp.active IS FALSE
但生成的查询包含HQL和Annotations中给出的条件.
因此,预期的结果不会到来.无论如何都要覆盖这个预定@Where
义的实体定义?
我知道这个问题太老了,但我面临着同样的问题,并认为我应该分享我的解决方法。
\n\n完全同意 @c\xd0\xbd\xc5\x9ddk 答案,因为您无法覆盖,但可以通过定义如下来忽略@Where
子句:nativeQuery
@Query(value = "Select * from customer where company_id = ?1", nativeQuery = true) List<Customer> findByCompanyIdIgnoringEntityWhere(Long companyId);
\n
\n@Query 注解中的 SQL 必须指向表的名称和字段的名称(而不是实体的名称)。
AFAIK 你不能在你的类中重写它,因为如果你看一下@Where 文档,你会看到这个接口被注释@Retention(value=RUNTIME)
,所以它有RUNTIME
a并且你可以在RetentionPolicy 文档RetentionPolicy
中看到:
RUNTIME: 注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们。
这迫使@Where
编译器将注释记录在类文件中,并在运行时由虚拟机保留,因此它将应用于整个类。