我正在尝试在两个实体上使用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,但我不确定这是不是正确的方法(以及如何继续前进)。 这是正确的做事方式还是我错过了什么?
答案 0 :(得分:0)
如果您无法将此关系添加到模型中,那么您将非常幸运。您是对的,您必须将 $(document).ready(function () {
var departments = "@ViewBag.Department";
});
和相应的Person
数据编入同一文档(这是Address
的确如此)。自定义@IndexedEmbedded
的正常/最佳方式是通过自定义(类)桥。但是,在您的情况下,问题是您需要在自定义网桥的实现中访问当前的Hibernate Document
。
除非您使用某种方法,例如此Session
绑定到Session
,否则您无法为给定的ThreadLocal
数据加载在桥梁实施中Address
。