我正在使用带有hibernate的Spring JPARepository,并且对实体更新有一个问题。 我通过传递单个实体来调用jparepository.save(实体)但在跟踪日志中我也可以看到为数据库中的其他行发出的更新语句。 在调用save之前,我有一个findAll,并且某些实体的值正在变化。 但我只传递一个实体进行保存,但仍然保存了所有更新的实体。 能否请您提供相关信息。
答案 0 :(得分:3)
从数据库加载实体时,此实体是“托管实体”。 如果您更改“托管实体”(并稍后提交事务),则无需明确保存它们。 (这就是“管理”的意思。)
但是Hibernate不会立即更新数据库,而是会等到:
EntityManager.flush
或EntityManager.flush
,否则您可能看不到非喷射刷新数据(https://stackoverflow.com/a/29825882/280244) )这就是你观察到的: