Hibernate Search 仅添加来自 IndexedEmbedded class 的 DocumentId
Hibernate Search add only DocumentId from IndexedEmbedded class
我有一个实体 "Invoice",这个实体与客户实体存在多对一关系。此客户实体也从其他实体用于 Hibernate 搜索,因此有许多 Hibernate 搜索注释。对于发票 HS-索引,我只想在发票索引中包含 Customer.id,而没有客户的其他 属性。
这怎么可能,因为在文档中我没有找到任何关于它的具体信息。
在最新版本的 Hibernate Search 中,您只需使用 @IndexedEmbedded(includePaths = "id")
。
Hibernate Search 3.4 已经很老了(9 岁),并且缺少许多功能。我建议您升级,因为您很可能遇到此版本永远无法解决的错误。
如果您真的必须坚持使用 3.4,我相信您唯一的解决方案是编写自定义桥接器:
public class CustomerIdBridge implements StringBridge {
public String objectToString(Object object) {
Customer customer = (Customer) object;
if ( customer == null ) {
return null;
}
Object id = customer.getId();
return id == null ? null : id.toString();
}
}
然后像这样应用桥梁:
@ManyToOne(...)
@Field(bridge = @FieldBridge(impl = CustomerIdBridge.class))
private Customer customer;
结果字段将简单命名为 "customer"(与您的 属性 同名)。
有关 Hibernate Search 3.4.2 中的桥的详细信息,请参阅 here。
我有一个实体 "Invoice",这个实体与客户实体存在多对一关系。此客户实体也从其他实体用于 Hibernate 搜索,因此有许多 Hibernate 搜索注释。对于发票 HS-索引,我只想在发票索引中包含 Customer.id,而没有客户的其他 属性。 这怎么可能,因为在文档中我没有找到任何关于它的具体信息。
在最新版本的 Hibernate Search 中,您只需使用 @IndexedEmbedded(includePaths = "id")
。
Hibernate Search 3.4 已经很老了(9 岁),并且缺少许多功能。我建议您升级,因为您很可能遇到此版本永远无法解决的错误。
如果您真的必须坚持使用 3.4,我相信您唯一的解决方案是编写自定义桥接器:
public class CustomerIdBridge implements StringBridge {
public String objectToString(Object object) {
Customer customer = (Customer) object;
if ( customer == null ) {
return null;
}
Object id = customer.getId();
return id == null ? null : id.toString();
}
}
然后像这样应用桥梁:
@ManyToOne(...)
@Field(bridge = @FieldBridge(impl = CustomerIdBridge.class))
private Customer customer;
结果字段将简单命名为 "customer"(与您的 属性 同名)。
有关 Hibernate Search 3.4.2 中的桥的详细信息,请参阅 here。