美好的一天。
我有一种情况,类似于下面提到的情况。
@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对这个实体进行索引,这样就能够搜索不仅通过实体名称匹配的实体,还可以通过匹配层次结构中某些父级的名称来实现。
我的想法如下:
我需要递归索引&#39;名称&#39;索引实体的成员+&#39; name&#39;实体的父母+进一步等等,以便他们来到同一个文件的领域。
然后,我将能够在一个字段上创建一个简单的查询,以检索所有需要的实体。
事实上,我对第1点有疑问。由于循环关系以及禁止空前缀这一事实(我不想要实体的名称及其实体),@ IndexedEmbedded不适用于此处父母在不同的领域。)
是否可以自定义方式进行实体索引?或者也许我的想法最初是错误的,还有另一种方法来解决这些问题?
答案 0 :(得分:1)
如果您还想将父名称索引到 name 字段中,您可以编写自己的自定义网桥 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#d0e4426。您必须要注意的一件事是您检测到任何循环依赖。
如果您有一个给定的最大深度,您也可以使用@IndexedEmbedded,并在查询构建时为所配置的最大深度的字段添加查询字词。此解决方案是否可行取决于您希望索引的深度。对于jsut几个级别,我更喜欢这个选项而不是自定义桥。