oracle – 在只读同义词上刷新时禁用Hibernate自动更新

oracle – 在只读同义词上刷新时禁用Hibernate自动更新,第1张

概述我有一个表和两个具有相同表的数据库,但是一个是另一个的符号链接,只允许在此表上读取. 我已使用Hibernate将表映射到Java,并使用spring将实体管理器的数据源设置为基于某些输入条件的两个数据库之一. 当我连接到第二个数据库时,我只调用只读 *** 作(选择),但似乎Hibernate尝试将某些内容刷回数据库,并且无法在此视图上告知更新. 如何仅针对第二个数据源禁用此更新并保持第一个数据源正常? 我有一个表和两个具有相同表的数据库,但是一个是另一个的符号链接,只允许在此表上读取.

我已使用Hibernate将表映射到Java,并使用spring将实体管理器的数据源设置为基于某些输入条件的两个数据库之一.

当我连接到第二个数据库时,我只调用只读 *** 作(选择),但似乎Hibernate尝试将某些内容刷回数据库,并且无法在此视图上告知更新.

如何仅针对第二个数据源禁用此更新并保持第一个数据源正常?

更新:
查看堆栈跟踪,似乎在这里启动了flush:

          at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)          at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)          at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)          at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)          at org.hibernate.ejb.AbstractEntityManagerImpl.beforeCompletion(AbstractEntityManagerImpl.java:504)          ... 55 more

这与hibernate.transaction.flush_before_completion属性有关吗?我可以为第二个数据源将其设置为false吗?

解决方法 很可能你的实体在从数据库加载的那一刻变得“脏”,而Hibernate认为它需要存储更改.如果您的访问器(get和set方法)没有返回由Hibernate设置的完全相同的值或引用,则会发生这种情况.

在我们的代码中,这发生在列表中,开发人员创建了新的列表实例,因为他们不喜欢他们在setter中获得的类型.

如果您不想更改代码,请将映射更改为字段访问.

您还可以通过在会话中将FlushMode设置为never来阻止Hibernate存储更改,但这只会隐藏在其他情况下仍会发生的实际问题,这将导致不必要的更新.

总结

以上是内存溢出为你收集整理的oracle – 在只读同义词刷新时禁用Hibernate自动更新全部内容,希望文章能够帮你解决oracle – 在只读同义词上刷新时禁用Hibernate自动更新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1164661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存