在Spring Data中为ID使用值对象的推荐策略

时间:2017-02-17 13:35:38

标签: sql spring spring-data spring-data-jpa

使用Value Objects可以有很多优点,特别是在它的类型严格性方面。使用PersonKey来使用Person(其中PersonKey确实是一个包裹的Long)比使用Long或String更安全。我想知道在Spring Data中处理这个问题的推荐策略是什么。设置存储库当然是例如使用

的问题
public interface PersonRepository CrudRepository<Person, PersonKey> {
}

但我想知道制作PersonKey类的最佳方法是什么,让它轻松映射。有没有比使用EmbeddedKey更好的选择?

1 个答案:

答案 0 :(得分:1)

有两个注释:IdClassEmbeddedId。我建议您使用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