簡體   English   中英

休眠查詢多對多關系

[英]Hibernate Query for ManyToMany Relationship

一點免責聲明:

  • 我是Java的初學者
  • 我是休眠的初學者水平

好的,既然我們已經解決了這個問題,那么我的問題是:

我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM