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

时间:2015-07-03 07:48:35

标签: java hibernate annotations

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

@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定义的实体?

2 个答案:

答案 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必须指向表的名称和字段的名称(而不是实体的名称)。