- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下类来使用实体管理器批量保存实体:
@Repository
@Transactional
public class AbstractRepositoryAdapter
{
private static final Logger logger = LoggerFactory.getLogger(AbstractRepositoryAdapter.class);
@PersistenceContext
private EntityManager entityManager;
@Transactional
public <O extends GenericEntity> void save(List<O> entities){
entities.forEach(entity->{
entityManager.persist(entity);
});
System.out.println("saved from save(List<O> entities)");
}
@Transactional
public <O extends GenericEntity> void write(List<O> entities)
{
if (!CollectionUtils.isEmpty(entities))
{
List<List<O>> listOfList = CollectionHelper.split(entities, 1000);
ExecutorService executorService = Executors.newFixedThreadPool(10);
List<Future<?>> futures = new ArrayList<Future<?>>();
for (List<O> subEntities : listOfList)
{
Future<?> future = executorService.submit(new BatchExecutor<O>(entityManager, subEntities));
futures.add(future);
}
ObjectHelper.wait(futures.toArray(new Future<?>[0]));// wait until all tasks are finished
executorService.shutdown();
}
}
@Transactional
private static class BatchExecutor<O extends GenericEntity> implements Runnable
{
private EntityManager em = null;
private List<O> entities = null;
public BatchExecutor(EntityManager em, List<O> entities)
{
this.em=em;
this.entities = entities;
}
@Override
@Transactional
public void run()
{
String sql = "";
try
{
entities.forEach(entity->{
em.persist(entity);
});
}
catch (Exception e)
{
logger.debug("Unable to save the entities for -> {} ", sql);
}
}
}
}
如果我尝试使用 write 方法来保存我的实体列表,则会出现以下异常:
javax.persistence.TransactionRequiredException: No transactional EntityManager available
但是如果我使用save方法来保存我的实体列表,它可以正常工作并且实体将保存到数据库
但是批量保存实体的代码有什么问题。事务属性也存在于此。理想情况下它应该有效。
注意:GenericEntity 是我所有实体类实现的接口(interface)。
我想编写一种多线程方式来保存通用的实体。但不知何故它不起作用。如果我迭代原始列表并尝试保存它,那么它就可以工作。
最佳答案
您的 BatchExecutor
实例不是由 Spring 创建的,因此该方法上的 @Transactional
注释不起作用。
关于java - 批量保存 JPA 实体 - TransactionRequiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52042647/
当我尝试使用 Hibernate 的多线程从数据库中删除数据时遇到问题。 repo : @Modifying @Query("DELETE FROM Customer cus WHERE cus.c
我在日志中收到异常: javax.persistence.TransactionRequiredException: Executing an update/delete query 这位于 upda
我正在运行 Karaf,我在 persistence.xml 中有一个数据源(指向 SQL Server DB),并且我正在尝试执行插入查询。 但是我遇到了这个异常: javax.persistenc
Spring MVC应用程序使用SpringDataJPA和休眠模式。生产模式利用了MySQL,但是对于单元测试,我已经设置了H2DB来运行,并且都使用单独的Java配置。该应用程序还利用了Sprin
这是我的存储库配置: @Configuration public class RepositoryConfing { @Bean public LocalContainerEntity
我有一个使用 Spring、Hibernate 和 JTA 的应用程序。 我们收到了一个数据大于预期的请求(10000 个元素),一般请求是 10-100 个元素。 在处理这个请求时,我们尝试在数据库
您好,我正在使用带有 spring 和 mongodb 的 hibernate JPA,并且我正在 Glassfish-4.0 上运行我的应用程序。 我的服务等级是: @Component publi
我正在尝试在 spring 中编写 2 个 native SQL 查询, 我在服务类中使用 SQL 的查询注释是: @Transactional @Scheduled(cron = "
我的 Controller 如下: @GetMapping("/groupByCourse") public Reply getStudentsCountByCourse(){
我正在开发一个简单的应用程序,其中数据库中的用户记录显示在 primefaces 数据表中,用户可以编辑或删除这些记录。这是 jsf 文件
我有异常(exception) javax.persistence.TransactionRequiredException: No transactional EntityManager ava
您好,我创建了一个简单的 JSF + JPA 应用程序。我的网络应用程序由一个 Entity、一个 ManagedBean 和一些 JSF 页面组成。它的目的是在 MySQL 数据库中创建和存储一个对
我想通过一个查询删除三个表中的相关数据。我收到错误消息:javax.persistence.TransactionRequiredException:执行更新/删除查询 我们使用 java 8、Hib
我有一个 Spring4 网络应用程序。最初我使用的是 Hibernate SessionFactory,并使用 Spring Hibernate API 进行开发。一切正常。也许愚蠢的是,我最近决定
TransactionRequiredException 的可能原因是什么? javax.ejb.EJBTransactionRolledbackException: JBAS011469: Tran
我有一个 CrudRepository 和一个删除数据的方法: public interface SampleRepository extends PagingAndSortingRepository
我有一个接受 POST 请求的 servlet,并且我正在尝试使用请求的参数来构建并保留实体类的实例。 这是我的 servlet: public class TheServlet extends Ht
我有以下类来使用实体管理器批量保存实体: @Repository @Transactional public class AbstractRepositoryAdapter { private
我有一个以 Hibernate 作为持久性提供者的 Spring/JPA 配置。但是我不明白为什么当我在没有打开事务的情况下对以下 DAO 代码调用 save() 时没有抛出 TransactionR
我有一个 Spring Boot 2 应用程序(仍处于开发阶段)与 JPA、hibernate 等一起运行良好。我现在进行的单一持久性测试通过正常。 但是,当我添加 @EnableBatchProce
我是一名优秀的程序员,十分优秀!