问题描述
使用 Spring Data JPA 存储库以及使用 @Query
注释的方法(如下所示),在这种情况下,我不知道此查询是否应该在 UserRepository
或 AddressRepository
中。当您想要从两个实体返回属性时,它会更加复杂。谢谢!
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);
}
解决方法
它返回一个 User
,因此我希望它存在于 UserRepository
中。
User
已经通过同名属性知道 Address
,因此 UserRepository
也可以这样做。
User
包含对 Address
的引用这一事实与选择正确存储库无关。
如果您的查询返回的内容与 User
和 Address
完全不同,例如关于每个城市的用户数量的一些统计数据,基于映射到视图的实体或独立于 Spring Data 的完整自定义实现,拥有一个单独的存储库可能是有意义的。这种实体和存储库位于不同的 Bounded Context。
您应该考虑的另一个问题是您是否需要/想要 AddressRepository
。我们显然几乎不知道您的域,但从我看来,Address
似乎并不独立于 User
而存在,因此应该是 User
-Aggregate 的一部分并且没有它自己的存储库。
见https://stackoverflow.com/a/21277087/66686