我有一个实体Foo
,包含Bar
s的嵌入式集合。
@Entity
@Table(name = "foo")
public class Foo {
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "bar", joinColumns = @JoinColumn(name = "foo_id"))
private Set<Bar> bars = new HashSet<>();
//...
}
@Embeddable
public class Bar {
@Column(name = "value", nullable = false)
private String value;
//...
}
我想找到集合中与给定参数(字符串)匹配的所有Foo
s。
我想在JPQL中实现的一些伪代码:
Foo find(String toMatch) {
return allFoos.stream()
.filter(f -> f.getBars.stream()
.map(Bar::getValue)
.anyMatch(value -> value.equals(toMatch)))
.findFirst()
.get();
}
但是,当我尝试此查询时:
@Repository
public interface FooRepository extends JpaRepository<Foo, Long> {
@Query("select f from Foo f " +
"where (" +
" :toMatch in f.bars.value " +
")")
Optional<Foo> find(@Param("toMatch") String toMatch);
}
它抛出:
Caused by: org.hibernate.QueryException: illegal attempt to dereference collection [foo.id.bars] with element property reference [value]
我希望避免使用需要连接多个表的解决方案。这是伪代码,但实际查询中充满了大量复杂的大型企业sql where或and语句。所以越少加入越好。
我相信正确的JPQL查询应该是这样的:
select f from Foo f where f.id in (
select b.id from f.bars b where b.value=:toMatch
)
我有一个实体,包含s的嵌入式集合。 我想在Set中找到与给定参数(String)匹配的所有s。 我想在JPQL中实现的一些伪代码: 但是,当我尝试这个查询时: 它抛出: 由以下原因引起:org.hibernate.QueryException:非法尝试使用元素属性引用[value]取消引用集合[foo.id.bars] 我希望避免使用需要连接多个表的解决方案。这是伪代码,但实际查询中充满了大量复杂
问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:
问题内容: 我想找到在其标签集中包含 所有 给定标签的项目。 以下是简化的类: 如果我这样尝试 我得到包含 任何 给定标签的项目。这不足为奇,但我希望包含 所有 给定标签的项目。所以我尝试另一种方式: 我收到错误消息。如果仅包含一个标签,它将起作用,但失败的原因不止于此。 如何在JPQL中表达呢? 问题答案: 诀窍是使用计数:
问题内容: 我在Scala和Java之间遇到编译问题。 我的Java代码需要一个 我的scala代码有一个 我收到编译错误: 似乎scala.collection.JavaConversions不适用于嵌套集合,即使Vector可以隐式转换为Iterable。除了遍历scala集合并手动进行转换之外,我还能做些什么使这些类型起作用? 问题答案: 应该弃用恕我直言。您最好使用来明确说明转换的时间和地
问题内容: 我正在写一个JPQL查询,它基于 Categories 集合进行查询。我的类别可以为空,因此我正在使用:categories = NULL进行检查。 当类别为NULL时,以上方法可以正常工作。但是,当类别超过一个值时,我得到了错误 java.sql.SQLException:操作数应包含1列 与hibernate有关的痕迹是 (?,?)或(?,?)中的category6_.catego
是否可以在Firestore中查询嵌套文档,而不向方法?我想通过循环所有用户ID并获取所有用户帖子来获取所有用户创建的所有帖子。 下面是我使用的代码。 谢谢。 不会在主机上显示任何内容。在控制台上显示“未来”的实例。 Firestore结构: 帖子 -