@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 的存在专门用于允许您覆盖默认选择。
我看到 @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 的存在专门用于允许您覆盖默认选择。