当您使用来自多个实体的 INNER JOIN 或 return 属性时,选择哪个 Spring 数据存储库?
Which Spring Data repository to choose when you use an INNER JOIN or return attributes from several entities?
使用 Spring Data JPA 存储库和使用 @Query
注释的方法,如下所示,我不知道此查询是否应该在 UserRepository
或 AddressRepository
在这种情况下。当您想要 return 来自两个实体的属性时,它会更加复杂。谢谢!
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u.name from User u JOIN u.address a where u.emailAddress = :emailAddress and a.zipcode=:zipcode")
User findByEmailAddressAndZipCode(String emailAddress, String zipcode);
}
它 returns 一个 User
因此我希望它存在于 UserRepository
中。
User
已经通过同名属性知道 Address
,因此 UserRepository
也可以这样做。
User
包含对 Address
的引用这一事实与选择 正确的 存储库无关。
如果您有查询返回与 User
和 Address
完全不同的内容,例如关于每个城市的用户数量的一些统计数据,拥有一个单独的存储库可能是有意义的,该存储库基于映射到视图的实体或独立于 Spring 数据的完整自定义实现。那种实体和存储库位于不同的 Bounded Context.
另一个你应该考虑的问题是你是否 need/want 一个 AddressRepository
。我们显然几乎不了解您的域,但据我所知,Address
似乎不独立于 User
而存在,因此应该是 User
-聚合的一部分,并且没有它自己的存储库。
参见
使用 Spring Data JPA 存储库和使用 @Query
注释的方法,如下所示,我不知道此查询是否应该在 UserRepository
或 AddressRepository
在这种情况下。当您想要 return 来自两个实体的属性时,它会更加复杂。谢谢!
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u.name from User u JOIN u.address a where u.emailAddress = :emailAddress and a.zipcode=:zipcode")
User findByEmailAddressAndZipCode(String emailAddress, String zipcode);
}
它 returns 一个 User
因此我希望它存在于 UserRepository
中。
User
已经通过同名属性知道 Address
,因此 UserRepository
也可以这样做。
User
包含对 Address
的引用这一事实与选择 正确的 存储库无关。
如果您有查询返回与 User
和 Address
完全不同的内容,例如关于每个城市的用户数量的一些统计数据,拥有一个单独的存储库可能是有意义的,该存储库基于映射到视图的实体或独立于 Spring 数据的完整自定义实现。那种实体和存储库位于不同的 Bounded Context.
另一个你应该考虑的问题是你是否 need/want 一个 AddressRepository
。我们显然几乎不了解您的域,但据我所知,Address
似乎不独立于 User
而存在,因此应该是 User
-聚合的一部分,并且没有它自己的存储库。
参见