2013-02-07 90 views
1

我想創建使用自然ID列表休眠條件。我看到這裏的例子 http://docs.jboss.org/hibernate/core/3.5/reference/en-US/html/querycriteria.html#query-criteria-naturalid但它只能顯示查詢單個記錄的例子:休眠標準的自然ID列表

session.createCriteria(User.class) 
    .add(Restrictions.naturalId() 
    .set("name", "gavin") 
    .set("org", "hb")); 

是否有更好的方法,使天然IDS比下面的例子列表的標準是什麼?

Junction junction = Restrictions.disjunction() 
    .add(Restrictions.naturalId() 
    .set("name", "gavin") 
    .set("org", "hb")) 
    .add(Restrictions.naturalId() 
    .set("name", "jdoe") 
    .set("org", "rh"));   
session.createCriteria(User.class) 
    .add(junction); 

謝謝。

回答

2

根據我的經驗,沒有。原因是由於某些實現中的SQL限制。當您嘗試短語在SQL中它得到棘手......

未跨數據庫所支持的僞SQL ...

select * from table where (name, org) in values (('gavin', 'hb'), ('jdoe', 'hr')) 

什麼休眠結束寫作是常見的跨數據庫的方式。 ..

select * from table where (name = 'gavin' and org = 'hr') OR (name = 'jdoe' and org = 'hr') 

我已upvoted這個問題,並加入到我的最愛跟蹤,希望我錯了,有一個更好的辦法。我知道在DB2 zOS中,這種古怪也會導致優化器做出糟糕的選擇。

+0

感謝您的解釋:) – maximilianus