gpt4 book ai didi

java - hibernate 搜索 : Store List of Children and retrieve via projection

转载 作者:行者123 更新时间:2023-12-02 12:41:02 25 4
gpt4 key购买 nike

我有以下 2 个带有 hibernate 和 hibernate 搜索注释的类:

父类:

@Indexed
@Entity
public class Parent {
@Id
@Column(name="parent_id")
private Long id;

@Field(store = Store.YES)
private String name;

@IndexedEmbedded
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", targetEntity = Child.class)
private List<Child> childList;

//getters and setters
}

子类:

@Entity
public class Child {
@Id
private Long id;

@ManyToOne(targetEntity = Parent.class)
@ContainedIn
@JoinColumn(name = "parent_id")
private Parent parent;

@Field(store = Store.YES)
private String name;
}

我为上述场景创建了一个索引。现在我试图通过搜索给定的父名称来获取所有子名称。

我在 field 上使用的投影如下:

Query searchQuery = queryBuilder.keyword().onField("name").matching("test").createQuery();
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(searchQuery, Parent.class);
fullTextQuery.setProjection("childList.name");

现在,当我尝试运行查询来检索搜索结果时,我仅获取父模型的第一个子级的名称。

当我使用 Luke 查看索引时,我能够看到文档中的所有值。

如何获取索引中存储的所有子名称列表?

最佳答案

在此示例中,您有一个需要“转身”的模型。

您的目标是查询列表子名称,因此您需要搜索Child实体。

您仍然可以在每个 child 中包含“ parent 的姓名”,并限制对此的查询。

@Entity @Indexed
public class Child {
...


Query searchQuery = queryBuilder.keyword().onField("parent.name").matching("test").createQuery();
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(searchQuery, Child.class);
fullTextQuery.setProjection("name");

关于java - hibernate 搜索 : Store List of Children and retrieve via projection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44936417/

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