JPARepository保存HistoricoTituloEntity却操作TokenEntity的问题咨询
问题原因分析
你遇到的调用HistoricoTituloRepository.save()却操作TokenEntity的问题,大概率是以下几种情况导致:
HistoricoTituloRepository定义错误
你未提供HistoricoTituloRepository的代码,但如果它错误继承了JpaRepository<TokenEntity, ...>而非JpaRepository<HistoricoTituloEntity, ...>,或者内部写了指向TokenEntity表的错误查询注解,就会让save操作指向错误实体。实体类映射配置错误
检查HistoricoTituloEntity的注解配置:- 确认
@Entity的name属性或@Table的name属性,没有错误指向TokenEntity对应的数据库表; - 排查是否和
TokenEntity存在错误的继承关系(比如误用@Inheritance导致表映射重叠); - 如果两个实体存在关联(比如
HistoricoTituloEntity持有TokenEntity的引用),检查关联注解的cascade属性是否设置了CascadeType.ALL或包含保存/更新的级联规则,这种情况下保存HistoricoTituloEntity时会触发TokenEntity的持久化操作。
- 确认
依赖注入匹配错误
虽然代码里写的是注入HistoricoTituloRepository,但如果Spring容器中存在多个匹配类型的Repository Bean,或者注入时通过@Qualifier指定了TokenRepository的名称,会导致实际注入的是TokenJPARepositoryTest实例,调用save自然会操作TokenEntity。持久化上下文的自动同步
如果在调用save之前,你修改了查询出来的TokenEntity实例,而该实例处于Spring Data JPA的持久化上下文管理中,当事务提交时,JPA会自动同步该实体的变更到数据库,可能会让你误以为是save操作导致的TokenEntity变更。
内容的提问来源于stack exchange,提问作者Lftbrito
相关产品推荐
相关产品推荐

