- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个批处理作业如下所示:
@Transactional
public void myBatchJob() {
// retrieves thousands of entries and locks them
// to prevent other jobs from touthing this dataset
entries = getEntriesToProcessWithLock();
additional = doPrepWork(); // interacts with DB
processor = applicationContext.getBean(getClass());
while (!entries.isEmpty()) {
result = doActualProcessing(entries, additional); // takes as many entries as it needs; removes them from collection afterwards
resultDao.save(result);
}
}
但是,如果 entries
集合足够大,我偶尔会收到以下错误。
ORA-01000: maximum open cursors exceeded
我决定责怪 doActualProcessing()
和 save()
方法,因为它们最终可能会在一个事务中创建数百个 blob。
明显的出路似乎是将处理分成多个事务:一个用于获取和锁定条目,多个其他事务用于处理和持久化。像这样:
@Transactional
public void myBatchJob() {
// retrieves thousands of entries and locks them
// to prevent other jobs from touthing this dataset
entries = getEntriesToProcessWithLock();
additional = doPrepWork(); // interacts with DB
processor = applicationContext.getBean(getClass());
while (!entries.isEmpty()) {
processor.doProcess(entries, additional);
}
}
@Transactional(propagation=REQUIRES_NEW)
public void doProcess(entries, additional) {
result = doActualProcessing(entries, additional); // takes as many entries as it needs; removes them from collection afterwards
resultDao.save(result);
}
现在每当调用 doProcess
时我都会得到:
Caused by: org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
如何让 HibernateTransactionManager
执行 REQUIRES_NEW
javadoc 建议的操作:暂停当前事务并启动新事务?
最佳答案
在我看来,问题在于您已经检索了顶部事务中的实体,并且当它们仍然与该事务相关联时,您尝试将它们(代理)传递给将在单独的事务中处理的方法。
我认为你可以尝试两种选择:
1) 在调用之前分离实体 processor.doProcess(entries, extra);
:
session.evict(entity); // loop through the list and do this
然后在内部事务中尝试合并:
session.merge(entity);
2) 第二个选项是检索 id,而不是 getEntriesToProcessWithLock
中的实体。然后您将传递不会导致代理问题的普通原始字段。然后,您将检索内部事务内的正确实体。
关于java - HibernateTransactionManager @Transactional(propagation=REQUIRES_NEW) 无法打开 2 个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46363095/
我正在尝试更新实体 @Test @Transactional public void test(){ ChatState chatState = chatStateDAO.read(1L);
我正在尝试将我的 spring 事务管理器从 JtaTransactionManager 升级到 HibernateTransactionManager。在 JTA TransactionManage
在以下代码中(Spring 3): @Transactional("txManager") public class DaoHolder { @Transactional(value="txM
正在和 friend 一起开发应用程序,但遇到了一个问题...我有这个代码: classpath:hibernate.cfg.xml
当我们可以通过session在hibernate中做事务时,需要什么HibernateTransactionManager再次在 Spring-hibernate一体化? 它的作用是什么? 为什么没有
我正在开发一个 spring 应用程序,之前它使用 HibernateTransactionManager 进行事务处理,使用 jdbc 模板进行查询/更新,并且工作正常。下面是使用的代码
我有一个 DAO 实现,它使用 HibernateTransactionManager 进行事务管理,并且该应用程序有 2 个 session 工厂。我在下面的 transactionManager.
你好, 我正在尝试从 Spring MVC Controller 将用户添加到数据库。我收到以下异常: org.springframework.web.util.NestedServletExcept
在使用 spring 和 hibernate 构建应用程序时,如果我使用 DataSourceTransactionManager,则出现异常时,它不会回滚。似乎它在不同
Spring JtaTransactionManager 和 HibernateTransactionManager 之间有什么区别,何时在我的应用程序中使用它们?我知道 HibernateTrans
我想集成 Spring 和 Hibernate 并使用 JTA 来管理事务。我还想将事务处理委托(delegate)给 App 服务器,在我的例子中是 JBoss。我对 Spring 中“transa
我试图将其缩短为我认为相关的内容,我希望它足够而不是压倒性的。请帮忙! 我正在将一个小型 wicket+databinder+hibernate 网络应用程序转换为使用 wicket+spring+h
据我了解,不建议在 Spring 中使用 HibernateTemplate。所以我想要的是使用 HibernateTransactionManager 编写它:到目前为止我所做的是数据库和 sess
有一个批处理作业如下所示: @Transactional public void myBatchJob() { // retrieves thousands of entries and lo
当我尝试为 org.springframework.orm.hibernate4.HibernateTransactionManager 创建 bean 时,我得到 org.springframewo
我试图在我的应用程序中使用 Hibernate+Spring,但遇到了以下错误: java.lang.ClassNotFoundException: org.springframework.orm.h
我正在使用 Spring Boot 项目开发 Spring Batch。我的问题是,当我如下使用 HibernateItemWriter 时,为什么需要来自 LocalSessionFactoryBe
我是一名优秀的程序员,十分优秀!