[英]LIKE - hibernate named queries
為什么使用此命名查詢會出現語法錯誤 :
@NamedQuery(name = "event_find", query = "from Event where location.address like str('%'+:address+'%') " +
"or :address like str('%'+location.address+'%'")
和:
Query query = session.getNamedQuery("event_find").setParameter("address", address); // or "%"+address+"%"
我怎么解決這個問題?
編輯:
事件:
@NamedQueries({
@NamedQuery(name = "event_find", query = "from Event where location.address like :address " +
"or :address like location.address")
})
@Entity
@Table(catalog = "control_station")
public final class Event implements Serializable {
private long id;
private Location location;
...
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
...
}
位置 :
@Entity
@Table(catalog = "control_station")
public final class Location implements Serializable {
private long id;
private String address;
private double latitude;
private double longitude;
...
}
例如,假設在表Location
有三個地址:
現在,如果我搜索西班牙馬德里,則結果必須包含上述所有內容...
即:
西班牙喜歡%Madrid,Spain%或馬德里,西班牙喜歡%Spain%
其中西班牙馬德里的聖地亞哥伯納烏球場, %馬德里,西班牙%或西班牙馬德里的西班牙 %柏納球場,西班牙馬德里的%
等等...
謝謝你們,答案是:
@NamedQuery(name = "event_find", query = "from Event where location.address like concat('%', :address, '%') or :address like concat('%', location.address, '%')")
我不是Hibernate的專家,但是我知道您可能有兩個問題:
%
放入setParameter()
調用中,而不是直接放在命名查詢中。 這也意味着您將得到兩個參數。 str()
,因為location.address
可能已經是字符串。 而且,看起來在str()
調用的末尾缺少括號。 所以,我會嘗試這樣的事情:
@NamedQuery(name = "event_findLike", query = "from Event where location.address like :addressLike " +
"or :address like '%'+location.address+'%'")
和
Query query = session.getNamedQuery("event_findLike").setParameter("addressLike", "%"+address+"%").setParameter("address", address);
命名查詢應如下所示:
@NamedQuery(name = "event_findLike", query = "from Event where location.address like str(:address) " +
"or :address like :locationAddress
您不應在此命名查詢中使用%
。
您可以在設置參數時使用%
符號,如下所示:
Query query = session.getNamedQuery("event_findLike")
.setParameter("address", '%'+address+'%')
.setParameter("locationAddress", '%'+locationAddress+'%');
在此代碼中,用包含必需信息的變量替換address
和locationAddress
。
另請參閱此鏈接以獲取類似信息: 如何使用“%”正確轉換JPQL查詢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.