lucene&多个相关实体

时间:2016-09-13 11:06:52

标签: lucene hibernate-search

我有3个实体,如:

provideForms()

我想搜索USER entites但是使用PERMISSION实体的名称(即如果用户键入了PERMISSION的名称,那么所有用户都应该通过GROUP实体获得具有该PERMISSION的用户)

我有一个解决方案如何连接2个实体(使用indexEmbedded和containedIn),但是没有线索当有3个实体时该做什么。

有人可以帮忙吗?

谢谢,V。

更新

我必须遵循Permission实体中的更改,所以我也使用containsIn。使用以下代码时,我有一个NullPointerException。

USER                GROUP              PERMISSIONS
id                  id                 id
name                ...                name
...                                    ...
group_id                               group_id

例外:

    indexedMapping
    .property("groups", ElementType.METHOD)
    .indexEmbedded()
    .prefix("group.")
    .targetElement(Group.class);


    super.entity(Group.class)
    .indexed()
    .indexName("Group_Index")
    .property("name", ElementType.FIELD)
    .field()
    .property("user", ElementType.FIELD)
    .containedIn()

    .property("permission", ElementType.METHOD)
    .indexEmbedded()
    .prefix("permission.")
    .targetElement(Permission.class);


    super.entity(Permission.class)
    .indexed()
    .indexName("Permission_Index")

    .property("name", ElementType.FIELD)
    .field()
    .store(Store.YES)

    .property("groups", ElementType.METHOD)
    .containedIn();

1 个答案:

答案 0 :(得分:0)

链接indexedEmbedded。在indexedEmbedded上的user.group 上使用group.permission。然后,属性user.group.permissions.name将自动添加到User索引。

请注意,如果我没记错的话,GroupPermission个实体必须为此编制索引(@Indexed注释或程序化API等效项)(尤其是containedIn )即使您没有明确地查询GroupPermission索引,也能正常工作。