当您使用来自多个实体的 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 注释的方法,如下所示,我不知道此查询是否应该在 UserRepositoryAddressRepository 在这种情况下。当您想要 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 的引用这一事实与选择 正确的 存储库无关。

如果您有查询返回与 UserAddress 完全不同的内容,例如关于每个城市的用户数量的一些统计数据,拥有一个单独的存储库可能是有意义的,该存储库基于映射到视图的实体或独立于 Spring 数据的完整自定义实现。那种实体和存储库位于不同的 Bounded Context.

另一个你应该考虑的问题是你是否 need/want 一个 AddressRepository。我们显然几乎不了解您的域,但据我所知,Address 似乎不独立于 User 而存在,因此应该是 User-聚合的一部分,并且没有它自己的存储库。 参见