spring 数据保存在数据库中而不保存(Hibernate)

s1ag04yj  于 2022-12-17  发布在  Spring
关注(0)|答案(4)|浏览(140)

我刚开始使用hib,当我添加一个元素并取消它时,我看到数据保存在db中,在我的代码中没有调用save方法来保存它。

8ljdwjyq

8ljdwjyq1#

如果你正在修改一个已经与Hibernate会话关联的对象,那么你所做的所有修改都将被保存。
例如,如果您执行以下操作:
1.从DB加载对象
1.通过添加或删除值来修改对象
1.即使您不使用save()方法,修改也将被保存。

qf9go6mv

qf9go6mv2#

在休眠配置中似乎有AutoFlash和/或AutoCommit参数On。请尝试禁用它们。

ibps3vxo

ibps3vxo3#

从数据库加载数据后,数据将变为持久性数据,并且如果在会话关闭之前更新数据,则对其所做的任何更改都将更新。如果不希望数据库中的数据在加载后使用所做的更改进行更新,请仅在关闭会话后进行更改。然后,如果要再次持久化数据,再打开一个会话并调用保存()或persist()。
编辑:1)确保禁用缓存,以确保不同会话之间没有缓存。

<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

2)请按照以下步骤操作:
i)开始会话--〉开始事务--〉从两个表中获取数据--〉关闭事务--〉关闭会话。
ii)创建第三个表的对象--〉对它做任何你想做的事情,比如添加前两个表中的数据。
iii)开始新会话--〉开始新事务--〉使用www.example.com()保存第三表的对象session.save--〉关闭事务--〉关闭会话。
步骤(i)完成后,table 1和table 2中的对象不再是“持久的”,而是“分离的”。如果session.save在步骤(iii)中不执行www.example.com(),table 3中的对象将不会被保存,因为它不再处理持久对象。
这是我对持久化和分离对象的理解。如果它不起作用,请回复。我将把它编码下来并找到解决方案。
还有一个建议,请考虑使用session.persist()而不是session.save(),如果您想了解它们的区别,请访问以下链接:What's the advantage of persist() vs save() in Hibernate?
祝你好运!

8i9zcol2

8i9zcol24#

您可能已写入@Transactional注解。请删除注解,然后重试。

相关问题