当前位置: 首页 > 知识库问答 >
问题:

Hibernate搜索:存储儿童列表并通过投影检索

公良阳波
2023-03-14

我有以下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;
}

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

我在现场使用的投影如下:

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

现在,当我尝试运行查询来检索搜索结果时,我只得到父模型的第一个孩子的名字。

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

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

共有1个答案

洪念
2023-03-14

在本例中,您有一个需要“掉头”的模型。

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

您仍然可以在每个子项中包含“父项的名称”,并限制对该名称的查询。

@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");

 类似资料:
  • 本文向大家介绍Microsoft SQL Server 检索所有存储过程的列表,包括了Microsoft SQL Server 检索所有存储过程的列表的使用技巧和注意事项,需要的朋友参考一下 示例 下面的查询将返回数据库中的所有存储过程的列表,以及关于每个存储过程的基本信息: SQL Server 2005 的ROUTINE_NAME,ROUTINE_SCHEMA和ROUTINE_DEFINITI

  • 问题内容: 我想在Hibernate Projection List中使用嵌套对象值。我有OneToMany和ManyToOne关系的Pojo“ Charge”和“ Tariff”课程。 我的示例代码如下: 收费 关税 我想按收费模式从关税中提取金额值。 我写的SQL标准,即工作。 选择charge.amount,charge.name从charge,tariff那里的charge.name喜欢’

  • 我有一个关于嵌套列表投影界面用法的问题。我有两个实体(父和子)(它们有单向关联) 父级=> 子=> 我有两个选择特定列投影界面。 这个查询可以工作,但是它选择ChildEntity的所有列,并且只将id、name propeties映射到ChildProjection。(生成的查询选择所有列,但我想只选择id和name列) 我如何只选择id和name列(为嵌套列表投影界面选择特定列)并映射到Chi

  • 我的问题是:当我对父实体(合同)执行查询时,在子实体(ContractHeader)上应用过滤器并使用FetchType。LAZY,LAZY规则应用正确,但当我尝试访问子列表(ContractHeader)时,过滤器不会应用于子对象,所有子对象都加载到列表中。有人能帮我回答这个问题吗?过滤器应与fetchtype一起使用。懒惰? 有人成功地实施了这样的事情吗? Tks! 我拥有以下实体: 在调用查

  • 问题内容: 我正在尝试以android应用程序的形式创建一个小型课程聚合程序。 我的课程全部存储在Firebase实时数据库中,该数据库可从firebase控制台查看,并且一切正常。 问题是我已经编写了一个Java方法来连接到DB,从DB检索数据,将数据转换为Custom Java对象,将其附加到另一个Custom Java对象,然后将该对象保存到ArrayList中。 与数据库的连接已成功建立,