在Hibernate Search中没有直接关系的索引实体

时间:2015-04-27 11:16:35

标签: java hibernate lucene hibernate-search denormalization

我正在尝试在两个实体上使用Hibernate Search,它们不会(并且不能)在对象级别共享关系,但是它们通过使用其ID的连接表进行连接。 (传统)

这些或多或少是两个实体:

@Entity
@Indexed
class Person {
    @Id
    private long id;

    @Field
    private String name;
    ....
}

@Entity
@Indexed
class Address {
    @Id
    private long id;

    @Field
    private String street;

    @Field
    private String zip;
    ....
}

它们通过ID连接:

@Entity
class Relation {
    @Id
    private long id;

    private long personId;
    private long addressId;
}

我想要实现的目标是找到通过Hibernate Search共享类似地址的类似人物。这意味着我正在搜索Person和Address中的属性。

我想最简单的方法是“模拟”@IndexedEmbedded关系,这意味着对数据进行非规范化,并将“street”和“zip”从Address添加到Person文档。我偶然发现了Hibernate Search Programmatic API,但我不确定这是不是正确的方法(以及如何继续前进)。 这是正确的做事方式还是我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果您无法将此关系添加到模型中,那么您将非常幸运。您是对的,您必须将 $(document).ready(function () { var departments = "@ViewBag.Department"; }); 和相应的Person数据编入同一文档(这是Address的确如此)。自定义@IndexedEmbedded的正常/最佳方式是通过自定义(类)桥。但是,在您的情况下,问题是您需要在自定义网桥的实现中访问当前的Hibernate Document

除非您使用某种方法,例如此Session绑定到Session,否则您无法为给定的ThreadLocal数据加载在桥梁实施中Address