2010-02-22 106 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();