2010-02-22 102 views
12

我有一个协会到另一个实体@Where注解,像这样忽略休眠@Where注解

public class EntityA { 

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

} 

最近不可避免的实体已经发生了,我需要加载EntityB的不符合@Where子句。我可以删除@Where注释,但它使用了很多,所以理想情况下我不想这样做。除了用另一个查询手动加载EntityB的列表,我有什么选择?我可以让Hibernate忽略@Where注释吗?

+0

我不明白这一点:你所需要的'@ Where'与否? – 2010-02-22 13:35:26

+1

我需要它的99%的查询,但有一个我不需要它。 – Zecrates 2010-02-23 07:51:12

回答

9

经过大量的研究,似乎这是不可能的。我强烈建议避免@Where,因为事前很难预测,如果你需要这些协会或不。

5

你可以用这样的相同数据的属性映射:

public class EntityA { 

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

} 

重要的是设置为可更新的虚假和插入FALSO避免你的数据一致性问题!

6

我知道它的一个老问题,但在任何情况下,寻找一个答案......
我有同样的困境,你不想弄乱你的代码“IS_DELETED =假”每一个地方,你选择,

简单的解决方法是使用本地SQL:

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