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/