【问题标题】:How to Prevent save to Database in Hibernate on transaction commit? [closed]如何防止在事务提交时保存到 Hibernate 中的数据库? [关闭]
【发布时间】:2016-04-28 14:16:52
【问题描述】:

提供一些上下文 - 我正在将我的数据库迁移到不支持 Hibernate 查询的其他平台。由于有很多地方用到了 Hibernate 的概念,我打算将 DAO 层的load()save()delete() 函数更改为在新数据库上工作,而不是在服务层进行更改。但是,一个问题是当提交事务时 Hibernate 会自行保存。我怎样才能避免这种情况?

当在 Hibernate 中提交事务时,会话中的持久实体将保存到数据库中。由于我使用的是 Spring 的 @Transactional 注释,因此我无法控制它。我的要求是我想防止对象被 Hibernate 保存到数据库中,并使用 @Transactional 注释在类中使用 DAO 自己保存对象。另外,我阅读了有关 Hibernate 的无状态会话的信息,那么使用它们是否是个好主意,因为我没有将任何内容保存到会话中?我读到了这个,但找不到具体的解决方案。一些 Hibernate + Spring 专家可以在这方面提供帮助吗?

【问题讨论】:

  • 还有什么平台?你用的是什么持久化 API?
  • 矩阵数据库,它是 nosql,我现在正在使用 JDBC
  • 我正在迁移到 NoSql 的 Matrix 数据库,目前我正在使用 JDBC
  • 您正在为新数据库使用 JDBC?以及您当前数据库的 API 是什么?如果有 JDBC 驱动程序,那么您可以轻松地为您的 JPA 提供程序编写适配器/方言/whateverItsCalled

标签: java mysql spring hibernate jpa


【解决方案1】:

如果 Hibernate 不支持数据库,最好的解决方案是抛出 hibernate 并仅使用 spring + jdbc 模板,这样您就可以完全控制它。

【讨论】:

  • 有很多地方使用它,而且它本身提供了事务和会话的功能,所以只是想找出一些方法来做到这一点。
【解决方案2】:

您需要切换到手动冲洗:

sessionFactory.getCurrentSession().setFlushMode(FlushMode.MANUAL);

【讨论】:

    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2019-11-04
    相关资源
    最近更新 更多