在Student类中,我手动传递id,并且所有实体关系都处于LAZY模式。
但是因为我传递的是id,Spring DATA JPA(Hibernate)会把它当作一个合并请求并进行SELECT调用,并且会尝试合并它。但是我不明白为什么它要尝试JOIN所有的关系。
我期待对学生表的选择调用,而不是联接其他表。我不明白为什么会发生这种情况?
第一个问题:
实体关系图
在Student类中,我手动传递id,并且所有实体关系都处于LAZY模式。
但是因为我传递的是id,Spring DATA JPA(Hibernate)会把它当作一个合并请求并进行SELECT调用,并且会尝试合并它。但是我不明白为什么它要尝试JOIN所有的关系。
我期待对学生表的选择调用,而不是联接其他表。我不明白为什么会发生这种情况?
第一个问题:
实体关系图
2条答案
按热度按时间3phpmpom1#
这样做是因为您正在使用
CascadeType.ALL
,这意味着Hibernate也应该为merge
操作级联。为了级联,Hibernate必须首先加载数据,而不是通过执行单独的选择来加载数据,Hibernate使用联接。jyztefdp2#
我不确定
City
,但对于其他字段,Hibernate需要连接来确定相应的字段是否为null
,在返回根实体之前,它需要知道这一点。