[英]Hibernate Query for ManyToMany Relationship
一點免責聲明:
好的,既然我們已經解決了這個問題,那么我的問題是:
我的EmailAddressModel具有以下到EmailAddressTag的映射
private String id;
@Column(unique = true)
private String emailAddressName;
@ManyToMany(fetch = FetchType.EAGER)
private Set<EmailAddressTag> emailAddressTags = new HashSet<EmailAddressTag>();
而我的EmailAddressTag是:
private String id;
@Column(unique = true)
private String emailAddressTags;
樣本數據集:
id: 1
emailAddressName: abc@gmail.com
tags (id=1,emailAddressTags=tag1)
如何使用HQL構造一個查詢以獲取一個知道標簽(整個對象)的電子郵件地址。 就像是
select * from EmailAddressTable where EmailAddressTable.Tag = 'tag1'
我努力了:
Set<EmailAddressTag> listOfTags = new HashSet<EmailAddressTag>();
listOfTags.add(tagToSearch);
Query query = session.createQuery("FROM EmailAddressTable item WHERE item.Tag IN (:tags)");
query.setParameterList("tags", listOfTags)
但是,如果使用setParameterList我有錯誤(java錯誤)是
無法將... EmailAddressTag強制轉換為java.util.Collection
和錯誤(休眠錯誤),如果我使用setParameter是
格式錯誤的數字常量:。
我將不勝感激任何幫助。 真的在這里迷路了。
如果您實際上將一個集合用於listOfTags
變量,則應該能夠解決編譯器錯誤。 您沒有顯示代碼的那部分,但是看起來可能像這樣:
Set<EmailAddressTag> listOfTags = new HashSet<EmailAddressTag>();
listOfTags.add(tagToSearchFor);
...
query.setParameterList("tags", listOfTags);
如果您想使用setParameter()
來代替,那么如果您將查詢條件更改為僅檢查單個標記,則應該能夠修復休眠錯誤:
Query query = session.createQuery("FROM EmailAddressTable item WHERE item.Tag = :tag");
query.setParameter("tag", tagToSearchFor)
希望這可以幫助。
我找到了答案。 其如下。
運算符為AND或OR
String hql = String.format("FROM %s obj where 1=1 ",c.getSimpleName());
for (int i = 0; i < tempList.size(); i++) {
hql += " "+operator+" :collection" + i + " = some elements(obj.emailAddressTags)";
}
Query query = session.createQuery(hql);
for (int i = 0; i < tempList.size(); i++) {
query.setParameter("collection" + i, tempList.get(i));
}
list = query.list();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.