Hibernate - 确保所有实体都持久化或none?
Hibernate - ensure that all entities are persisted or none?
我有以下代码可以将两个不同的 entities
保存到我的 MYSQL
数据库中。
这按预期工作,但是如果一个 table 而不是另一个有问题,那么一个 table 会被填充,而另一个不会。
注意 - 我是 运行 我的应用程序,作为 jboss EAP
服务器中的 EAR
文件。
我想确保两个 table都被填充或none.
我该怎么做?
Persistence.xml
<persistence-unit name="entitystore" transaction-type="JTA">
<jta-data-source>java:/jdbc/datasources/global</jta-data-source>
Java 服务 class:
public void createCompanyStatuses(String client, CompanyStatusPostDTO companyStatusPostDTO) {
EntityManager entityManager = null;
try {
CompanyStatus companyStatus = new CompanyStatus();
companyStatus.setCompanyLabel(candidateMaskedStatusPostDTO.getCompanyLabel());
entityManager = entityManagement.createEntityManager(client);
entityManager.persist(companyStatus);
for(Integer employeeStatusId: companyStatusPostDTO.getEmployeeStatuses()){
CompanyStatusEmployeeStatus companyStatusEmployeeStatus = new CompanyStatusEmployeeStatus();
companyStatusEmployeeStatus.setEmployeeId(employeeStatusId);
companyStatusEmployeeStatus.setCompanyId(companyStatus.getCompanyId()); //todo - how will get this?
entityManager.persist(CompanyStatusEmployeeStatus);
}
} catch(Exception e){
log.error("An exception has occurred in inserting data into the table" + e.getMessage(), e);
} finally {
entityManagement.closeEntityManager(client, entityManager);
}
}
编辑:
我试过添加:
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
但是,问题仍然存在,即成功的坚持工作而不成功的不坚持——而是要么全部坚持,要么什么都不坚持。
只需使用一个事务。
与 spring 一起使用 @Transactional 注释。
没有spring框架,你可以做到
doInJPA(entityManager -> {
...
entityManager.persist(obj);
...
});
参见:https://vladmihalcea.com/high-performance-java-persistence-github-repository/
我有以下代码可以将两个不同的 entities
保存到我的 MYSQL
数据库中。
这按预期工作,但是如果一个 table 而不是另一个有问题,那么一个 table 会被填充,而另一个不会。
注意 - 我是 运行 我的应用程序,作为 jboss EAP
服务器中的 EAR
文件。
我想确保两个 table都被填充或none.
我该怎么做?
Persistence.xml
<persistence-unit name="entitystore" transaction-type="JTA">
<jta-data-source>java:/jdbc/datasources/global</jta-data-source>
Java 服务 class:
public void createCompanyStatuses(String client, CompanyStatusPostDTO companyStatusPostDTO) {
EntityManager entityManager = null;
try {
CompanyStatus companyStatus = new CompanyStatus();
companyStatus.setCompanyLabel(candidateMaskedStatusPostDTO.getCompanyLabel());
entityManager = entityManagement.createEntityManager(client);
entityManager.persist(companyStatus);
for(Integer employeeStatusId: companyStatusPostDTO.getEmployeeStatuses()){
CompanyStatusEmployeeStatus companyStatusEmployeeStatus = new CompanyStatusEmployeeStatus();
companyStatusEmployeeStatus.setEmployeeId(employeeStatusId);
companyStatusEmployeeStatus.setCompanyId(companyStatus.getCompanyId()); //todo - how will get this?
entityManager.persist(CompanyStatusEmployeeStatus);
}
} catch(Exception e){
log.error("An exception has occurred in inserting data into the table" + e.getMessage(), e);
} finally {
entityManagement.closeEntityManager(client, entityManager);
}
}
编辑:
我试过添加:
@TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW)
但是,问题仍然存在,即成功的坚持工作而不成功的不坚持——而是要么全部坚持,要么什么都不坚持。
只需使用一个事务。
与 spring 一起使用 @Transactional 注释。
没有spring框架,你可以做到
doInJPA(entityManager -> {
...
entityManager.persist(obj);
...
});
参见:https://vladmihalcea.com/high-performance-java-persistence-github-repository/