【发布时间】:2015-09-27 15:15:25
【问题描述】:
情况:(使用弹簧) 我有一个存储库,其中包含使用自定义查询定义的两种方法
@Query("-----")
public Object getA();
@Query("-----")
public List<Object> getB();
出于某种原因,我不想编写连接查询来检索数据,
在控制器中我定义了一个端点,我可以调用那些我能够检索数据的方法,
但我想要这样的东西,
B 的所有对象都应该在 A 对象内。
A(Object)
a1:
a2:
a3:
B[3] :
b1:
b2:
b3
我该怎么做?
【问题讨论】:
-
首先,您通常不应该直接从控制器调用存储库方法。这就是
@Service的用途。其次,如果A与B有关系,您应该在A的字段上使用@JoinTable,这意味着获取A(@Query("select a from A a")) 将使您能够访问关联的@ 987654331@s. -
谢谢 beerbajay,重点是当我说“出于某种原因”时,我的意思是,还有 10 个以上的实体依赖于我定义的 A (OneToMany)所有这些,当我查询 A 时,hibernate 正在查询所有可能的依赖项并检索我不想要的详细信息。在这种情况下,我只想要 A 和 B。其他情况下为 A 和 D。
-
默认情况下使用
FetchType.LAZY,并且您的其他实体不应全部获取。您还可以选择为同一个表定义 多个 映射的@Entitys,因此一个包含所有As 字段,然后仅包含B。这是多余的,在大多数情况下不是最佳实践,但也许您的用例是可以接受的边缘情况之一(但可能不是)。 -
我明白你在说什么,我可以使用 FetchType.LAZY 来实现。这在两个实体相关但在某些情况下我需要一个像我展示的对象并且它们之间没有任何关系的情况下是有效的。
-
还有Beerbajay,为什么要使用服务来调用存储库方法?如果我没有要应用的任何业务逻辑,它有什么优势。 stackoverflow.com/questions/3688664/…除了上面链接中给出的理论解释之外,您能否添加一个实时场景。