我試圖構建Hibernate條件查詢來查找具有集合中特定元素的實體。使用條件獲取具有特定元素的字符串集合中的所有對象API
我們可以以一個例子一本書-object,看起來像這樣:
public class Book {
private Long id;
private String title;
private Set<String> authors = new HashSet<String>();
}
實體映射這樣的:
<class name="Book" table="Book">
<id name="id" column="BOOK_ID">
<generator class="native"/>
</id>
<property name="title"/>
<set name="authors" table="Book_Authors">
<key column="BOOK_ID"/>
<element type="string" column="AUTHORS"/>
</set>
</class>
現在我想找出哪些書馬特寫的。用純SQL我可以做一個這樣的查詢:
String author = "Matt";
String query = "SELECT * FROM Book " +
"WHERE BOOK_ID IN " +
"(SELECT BOOK_ID FROM Book_Authors " +
"WHERE authors = :author)";
List<Book> result = session.createSQLQuery(query)
.addEntity(Book.class)
.setParameter("author", author)
.list();
這工作都好和好,和我出去馬特一直是書寫文字的一部分的所有書籍。然而,我工作的項目使用Criteria API而不是原始SQL,並且我還沒有找到以這種形式表達相同查詢的方法。我查看了限制API,並且找到最接近的是Restions.in(propertyName,collection),但是其他方式(對象中有一個值,許多值匹配)。
任何想法?
如果作者是一個實體,你可以使用子查詢 – sblundy 2010-06-01 18:25:03