使用Value Objects可以有很多优点,特别是在它的类型严格性方面。使用PersonKey来使用Person(其中PersonKey确实是一个包裹的Long)比使用Long或String更安全。我想知道在Spring Data中处理这个问题的推荐策略是什么。设置存储库当然是例如使用
的问题public interface PersonRepository CrudRepository<Person, PersonKey> {
}
但我想知道制作PersonKey类的最佳方法是什么,让它轻松映射。有没有比使用EmbeddedKey更好的选择?
答案 0 :(得分:1)
有两个注释:IdClass
或EmbeddedId
。我建议您使用EmbeddedId
,因为您不必将您的ID类的所有属性重复到您的实体类中。
我们假设您使用EmbeddedId
。它看起来像这样:
@Embeddable
public class PersonKey {
private Long id;
}
@Entity
public class Person {
@EmbeddedId
private PersonKey personKey;
}
您可以像这样访问您的ID:
select p.personKey.id from Person p
但是使用IdClass
,您的Person类看起来像这样:
@Entity
@IdClass(Person.key)
public class Person {
@Id
private Long id;
}
你会像这样访问:
select p.id from Person p