Hibernate Search与循环关系

时间:2014-04-16 12:48:51

标签: java lucene hibernate-search

美好的一天。

我有一种情况,类似于下面提到的情况。

@Entity
@Table(name="EntityDO")
public class EntityDO {
    @Id
    private Long id;

    @Column(nullable = false)
    private String name;

    @OneToMany(mappedBy = "parentEntity")
    private Set<EntityDO> ownedEntities;

    @ManyToOne
    @JoinColumn(name="PARENT_ID", nullable=true)
    private EntityDO parentEntity;

    ...
}

我需要通过Hibernate Search对这个实体进行索引,这样就能够搜索不仅通过实体名称匹配的实体,还可以通过匹配层次结构中某些父级的名称来实现。

我的想法如下:

  1. 我需要递归索引&#39;名称&#39;索引实体的成员+&#39; name&#39;实体的父母+进一步等等,以便他们来到同一个文件的领域。

  2. 然后,我将能够在一个字段上创建一个简单的查询,以检索所有需要的实体。

  3. 事实上,我对第1点有疑问。由于循环关系以及禁止空前缀这一事实(我不想要实体的名称及其实体),@ IndexedEmbedded不适用于此处父母在不同的领域。)

    是否可以自定义方式进行实体索引?或者也许我的想法最初是错误的,还有另一种方法来解决这些问题?

1 个答案:

答案 0 :(得分:1)

如果您还想将父名称索引到 name 字段中,您可以编写自己的自定义网桥 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#d0e4426。您必须要注意的一件事是您检测到任何循环依赖。

如果您有一个给定的最大深度,您也可以使用@IndexedEmbedded,并在查询构建时为所配置的最大深度的字段添加查询字词。此解决方案是否可行取决于您希望索引的深度。对于jsut几个级别,我更喜欢这个选项而不是自定义桥。