Как откатить несколько объектов, сохраняющихся в JPA (EcliplseLink) + JTA

Среда: Java EE7, JPA (EclipseLink), JTA, Glassfish 4.1.1

Я хочу отменить создание нескольких сущностей.

Мои коды по существу следующие:

TestBean.java

@Named
@RequestScoped
public class TestBean implements Serializable {
    @Inject
    private TestService service;

    private String value1, value2, value3;

    public String saveThreeEntities(){        
        service.createThreeEntities(value1, value2, value3);
    }
}

TestService.java

@ApplicationScoped
public class TestService {

    @PersistenceContext
    EntityManager em;

    @Transactional
    public void createThreeEntities(String value1, String value2, String value3) {
        TestEntity entity1 = new TestEntity();
        entity1.setValue(value1);

        TestEntity entity2 = new TestEntity();
        entity2.setValue(value2);

        TestEntity entity3 = new TestEntity();
        entity3.setValue(value3);

        em.persist(entity1);
        em.persist(entity2);
        em.persist(entity3);
    }
}

Я надеюсь, что JPA выполнит откат всех трех объектов, если ему не удастся сохранить только entity3 из-за нарушения уникальности имени, например. Но JPA сохраняет объект 1 и объект 2 и, к сожалению, не сохраняет объект 3.

Я пробовал много подходов, но мои коды не работают так, как я ожидаю.

Как откатить серию операторов persist в JPA?< /а>

Как откатить транзакцию в JPA?

Как откатить серию операторов persist в JPA?< /а>

Мне нужна помощь.


person user9637733    schedule 12.04.2018    source источник
comment
Я подозреваю, что ваш корд не связан с транзакцией. Попробуйте использовать @Singleton вместо @ApplicationScoped и @TransactionalAttribute вместо @Transactional   -  person Henrique Fernandes Cipriano    schedule 13.04.2018
comment
Это не решило проблему.   -  person user9637733    schedule 22.04.2018