当前位置: 首页 > 知识库问答 >
问题:

当您使用内部连接或从几个实体返回属性时,要选择哪个Spring数据存储库?

南宫凡
2023-03-14

在使用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);
}

共有1个答案

周昊乾
2023-03-14

它返回一个userI,因此希望它存在于userrepository中。用户已经通过同名属性知道地址了,因此userrepository也可以这样做。

用户包含对地址的引用这一事实与选择正确的存储库无关。

如果您的查询返回的内容与useraddress完全不同,例如关于每个城市用户数的一些统计信息,那么使用一个单独的存储库是有意义的,它可以基于映射到视图的实体,也可以基于独立于Spring数据的完整自定义实现。这种实体和存储库位于不同的有界上下文中。

但是,您应该考虑的另一个问题是,您是否需要/想要addressrepository。显然,我们几乎不知道您的域,但从我所看到的情况来看,地址似乎不是独立于用户而存在的,因此它应该是用户聚合的一部分,而没有自己的存储库。参见https://stackoverflow.com/A/21277087/66686

 类似资料:
  • 我想用spring数据写一个查询,可以找到所有有自己的狗和车的人…可以有任何身体帮助吗

  • 让我说清楚点。我使用spring-boot@entityscan注释来执行包扫描,如果在两个不同的包中发现了两个同名的实体,那么应该有一种方式,即只有一个实体被选中并注册,而另一个实体被拒绝。就实体名称而言,甚至我都知道没有两个实体可以有相同的名称。我是在spring-boot和spring-data-jpa的上下文中问这个问题的 由于DefaultOrganization用@PrimaryEnt

  • 在Spring Data JPA的“入门”示例中,我们创建了一个扩展CrudRepository的接口。但是,它只处理一个实体: 在现实世界的应用程序中,有许多实体(表),我们需要对它们进行CRUD操作。使用具有多个(相关或无关)实体的Spring数据JPA存储库的正确方法是什么? 我是否必须为每个实体创建接口并逐个自动连接它们(现在听起来这是一个非常疯狂的想法)?

  • 我需要帮助设置一个应用程序,该应用程序将内部(主)MS SQL数据库DB1中的数据子集复制到另一个MySQL数据库DB2中,该数据库在Web服务器上运行,供Web应用程序使用(即,我想同步这两个数据库)。这两个数据库上的表具有相同的名称,尽管DB2上只定义了属性/列的子集。我想使用(xml配置的)spring、spring data jpa(即JpaRepository接口)和hibernate作

  • 我目前正在尝试使用spring数据存储库删除我的一些实体。delete调用工作时没有任何异常/错误消息,但之后不会删除实体。 这些是我的实体: 而且 存储库非常简单: delete调用类似于 有什么想法为什么这个变化没有反映在数据库中吗? 编辑1: 我找到了变通办法,但我还是不明白真正的问题是什么。如果我像这样删除帖子(有几个例外,因为违反了约束,但帖子仍然会被删除),它就“起作用”了: 编辑2:

  • 假设我有一个MySQL存储过程,其中包含以下选择: 如何在中使用注释,以便我可以获得结果?像这样: