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