Hibernate JPA在更新过程中选择之前触发插入?

Hibernate JPA在更新过程中选择之前触发插入?,hibernate,jpa,spring-data-jpa,Hibernate,Jpa,Spring Data Jpa,我有一个SpringJPA存储库,它正在尝试对一个实体进行选择。该实体与其母公司有关系,因此: 用户(父项)>地址>地址类型(子项) 在更新用户的过程中,我想添加一个地址。地址有一个字段addressType,该字段与addressType静态数据表(即地址类型只能是POBOX或General)有一个一一对应的关系,如上所述。 在更新用户的过程中,我添加了一个新的地址,并使用传入的用户+地址DTO传入的AddressType执行AddressType的findByName 但是,当我在Addre

我有一个SpringJPA存储库,它正在尝试对一个实体进行选择。该实体与其母公司有关系,因此:

用户(父项)>地址>地址类型(子项)

在更新
用户
的过程中,我想添加一个
地址
。地址有一个字段
addressType
,该字段与
addressType
静态数据表(即地址类型只能是
POBOX
General
)有一个一一对应的关系,如上所述。 在更新
用户
的过程中,我添加了一个新的
地址
,并使用传入的
用户+地址
DTO传入的AddressType执行AddressType的
findByName

但是,当我在AddressType的JPA存储库上执行
findByName
时,它会首先尝试在父
地址上执行插入操作。这会导致IntegrityViolationException,因为第一次插入地址时没有
AddressType
,这是一个必填字段。我在这里做了一些研究,发现一些线程表明这可能是entitymanager的行为,它以某种方式将
地址添加为脏地址


我的问题是-如何防止在父
地址
上插入,从而使
地址类型
上的选择自行发生?

这是JPA的正常刷新行为。当您更改JPA管理的实体时,这些更改会在执行查询之前刷新到数据库中

您确实通过向
实体添加
地址
更改了
用户
实体

要修复此问题,请仅在完全构造地址时添加地址,即设置了地址类型


注意:我肯定这是一个副本,但我找不到。但是有一个密切相关的问题:

在完成AddressType查找之前,不要添加Address/User。只有在确定PersistenceUnit/事务已完成时,才向该事务添加某些内容,直到设置了AddressType引用后,才会添加这些内容。