@Id 和@DocumentId 注解可以指定在不同的字段上吗?

Can the @Id and @DocumentId Annotations Be Specified on Different Fields?

我看到 @Id@DocumentId 注释在 Hibernate Search Reference Guide 的代码示例中总是一起出现在同字段,如下。

public class Book {
    @Id
    @GeneratedValue
    @DocumentId
    private Integer id;

    //...
}

我想知道是否可以在不同的字段上使用@Id@DocumentId注解,如下?

public class Book {
    @Id
    @GeneratedValue
    private Integer id;

    @DocumentId
    private Integer isbn;

    //...
}

此要求的目的可能是使用 @Id 注释执行 Hibernate 查询,并使用 @DocumentId 用于执行 Hibernate Search 查询的注释。

谢谢。

所以,答案是肯定的,你可以做到。我们甚至为此进行了单元测试。

下一个问题是:我会推荐它吗?

不是真的。将@DocumentId 保留在您的@Id 上,并在您的isbn 字段上添加一个@Field。恕我直言,它更直观,并且可以让您在 isbn 上进行搜索。您没有充分的理由依赖这种极端情况。

从技术上讲,@DocumentId 是可选的,它将默认使用与 @Id 相同的字段。我想我们应该从一些示例中删除它,以澄清我们通常不希望您使用它。

因此 @DocumentId 的存在专门用于允许您覆盖默认选择。