忽略Hibernate @Where注释

时间:2010-02-22 13:32:27

标签: hibernate annotations where-clause

我有一个实体,它与另一个用@Where注释的实体有关联,就像这样

public class EntityA {

    @OneToMany
    @Where(...)
    private List<EntityB> entityBList;

}

最近发生了不可避免的事情,我需要加载不符合@Where子句的EntityB。我可以删除@Where注释,但它被大量使用,所以理想情况下我不想这样做。除了手动加载EntityB的列表,还有另一个查询,我有哪些选择?我可以告诉Hibernate忽略@Where注释吗?

5 个答案:

答案 0 :(得分:12)

经过大量研究后,似乎根本不可能。我强烈建议避免使用@Where,因为事先很难预测你是否需要这些关联。

答案 1 :(得分:7)

我知道这是一个老问题,但万一有人找答案......我也有同样的困境,你不想在你选择的地方用“is_deleted = false”弄乱你的代码,

简单的解决方案是使用本机SQL:

lst = sessionFactory.getCurrentSession().
createSQLQuery("select {entb.*}  from EntityB entb where  is_deleted=1")                            
           .addEntity("entb", EntityB.class)
           .list();

答案 2 :(得分:6)

您可以使用相同的数据映射另一个属性,如下所示:

public class EntityA {

    @OneToMany
    @JoinColumn(name='theColumnName', insertable=false, updateable=false)
    private List<EntityB> entityBListReadOnly;

}

重要的是设置为可更新的false和可插入的false以避免数据中出现一致性问题!

答案 3 :(得分:6)

我只是有同样的问题。我解决了这样的问题:

@Query(value="SELECT * FROM EntityA", nativeQuery=true)
public ignoreWhereMethod(){}

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

答案 4 :(得分:1)

另一个解决方案是过滤器,如本问题所述。 Hibernate how to ignore @Where annotation

我将自己尝试一下,因为在我们的情况下,@where@NamedNativeQueries的组合是非常麻烦的解决方案。但是我还不知道@Filter是否更好。