java只读类型_Java / Hibernate – 在只读模式下不允许写操作

我最近经常遇到一个烦人的例外,经过对谷歌和这个论坛的一些研究后,我仍然没有找到可以解决我的问题的答案.

这是事情 – 有时,我尝试使用hibernate更新或创建一个新对象时出现以下错误:

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1186)

at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:696)

at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)

at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)

at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)

真正奇怪的是,有时用getHibernateTemplate()方法更新对象时.saveOrUpdate(object);它会工作,但有时使用相同的对象,并通过调用相同的方法它不起作用,但它似乎取决于我如何获得对象的第一个位置.

示例:假设我有一个包含3个字段的表:id,type,length.可能发生的是,如果我通过id获取对象并更新长度,那么它将起作用.如果我按类型获取并更新长度,那么它将无法工作.所以到目前为止我一直在做的是避免这个问题,就是获取对象后面不会引起问题的方法,但是尝试找到一种有效的方法会变得越来越烦人.

此外,现在我在尝试创建一个对象(但不是所有对象,仅在一个特定的表上)时遇到此异常,并且无法找到解决方法的方法.我试图在事务中添加@Transactional(readOnly = false),但它没有改变任何东西,并且显示模式说我不是以只读方式.

有什么建议?

编辑7月26日:

这里有一些与hibernate相关的配置

20

25

true

true

org.hibernate.dialect.MySQLDialect

true

true

true

如果它可以帮助

PROPAGATION_REQUIRED,readOnly

PROPAGATION_REQUIRED,readOnly

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

编辑8月31日:

我的类中扩展HibernateDaoSupport以保存对象的相关代码是:

public void createObject(Object persisObj) {

getHibernateTemplate().save(persisObj);

}

解决方法:

我从视图过滤器更改了单个会话属性.问题解决了:

hibernateFilter

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

singleSession

false

标签:java,spring,hibernate,readonly

来源: https://codeday.me/bug/20190918/1810905.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值