我按照此链接使用 JakartaEE 8、Payara web-server 5.2021.9、Hibernate 5.4.32 和 MariaDb 10.5 测试多租户。当我坚持并抛出异常时,即使使用 entityManager.getTransaction().rollback() 或 setRollbackonly(),我的测试实体也不会回滚(仍然保留在数据库中)。
这是我的代码:
@Stateless
public class TestRollBackBean extends Dao {
@PostConstruct
public void init() {
logger.info("is initializing");
}
@PreDestroy
public void detroy() {
logger.info("is detroying");
}
private static final Logger logger = LogManager.getLogger();
public void testCertFormTx(final String tenantId) {
final EntityManager em = getEntityManager(tenantId);
final EntityTransaction etx = em.getTransaction();
final CertificateForm cf = new CertificateForm();//ntity
try {
logger.debug("test persist and rollback for CertificateForm");
cf.setActive(true);
cf.setDesp("testing");
em.persist(cf);
logger.debug("new Id: {}", () -> cf.getId());
throw new Exception("test rollback now");
} catch (Exception e) {
etx.setRollbackOnly();
} finally {
if (em != null && em.isOpen()) {
em.close();
}
}
}
}
我错了或错过了什么?