2011-11-28 131 views
1

加入我上課:在Hibernate查詢

class User{ 
String id; 
ArrayList<UserAttribute> attributeList=new ArrayList<UserAttribute>(); 
} 

class UserAttribute{ 
User user; 
String value; 
String key; 
} 

我有相關的類表。

用戶

column id 

user_attribute

column user_id 
column key 
column value 

例如用戶表格內容

user_id="123" 

user_id="234" 

例如user_attribute表內容

user_id="123", key="address", value="green house street" 

user_id=234, key="address", value="blue house street" 

user_id="123", key="phone", value="234324" 

user_id="234", key="phone", value="786988" 

我想誰擁有的地址「綠房子街」 (非或)有電話「234324」

我寫SQL(甲骨文)的用戶SQL編輯器:

select u.* from user u left join user_attribute prop on u.id=prop.user_id inner join user_attribute prop2 on prop.user_id = prop2.user_id where prop.value = 'green house street' and prop.key = 'address' and prop2.key ='phone' and prop2.value = '234324'; 

我試圖在休眠方面許多東西:但不能使用聯接,因爲得到

「unecpected token on」

使用「on」子句時出錯。

到底我寫

entityManager.createQuery(
select u from User u, u.attributeList prop, u.attributeList prop2 where prop.value = :address and prop.key = :key and prop2.key =:key2 and prop2.value = :phone and prop.user.id=u.id and prop2.user.id=u.id and prop2.user.id=prop.user.id 
)..setParameter("key", "address") 
       .setParameter("phone", "234324") 
       .setParameter("key2", "phone") 
       .setParameter("address", "green house street").getSingleResult(); 

仍然沒有機會,

我努力找到一個查詢解決方案,但至今無法achive。 感謝您的任何想法。

回答

6

您需要進行兩次連接,但不需要指定任何on子句,因爲Hibernate知道,由於關聯的映射關係,表是如何鏈接在一起的。所以下面的查詢應該可以工作:

select u from User u 
inner join u.attributeList a1 
inner join u.attributeList a2 
where a1.value = 'green house street' and a1.key = 'address' 
and a2.key ='phone' and a2.value = '234324' 
+0

感謝,我寫試圖提前 – merveotesi

+0

它的好,謝謝後反饋 – merveotesi

1

Hibernate遇到了「on」子句的問題。

使用原生SQL查詢..

PLZ參考HQL Problem