gpt4 book ai didi

java - 使用条件 API 获取字符串集合中具有特定元素的所有对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:38 26 4
gpt4 key购买 nike

我正在尝试构建一个 Hibernate Criteria 查询来查找集合中具有特定元素的实体。

我们可以以一个 Book 对象为例,它看起来像这样:

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,而且我还没有找到一种方法来以那种形式表达相同的查询。我查看了 Restrictions API,我发现最接近的是 Restions.in(propertyName, collection) 但它的工作方式相反(对象中的一个值,要匹配的许多值)。

有什么想法吗?

最佳答案

您是否尝试过使用 HQL

SELECT bk FROM Book bk WHERE :author IN bk.authors

HQL 通常比 Criteria 更强大,因此您可能会受困于它。

关于java - 使用条件 API 获取字符串集合中具有特定元素的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2920678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com