1
我正在使用實體管理器來創建具有本機查詢的表,並使用em.persist()將行插入到另一個表中。 當創建表的本機查詢失敗時,我回滾了,但em.persist()總是成功。是否有人知道答案?使用本機查詢來在jta事務中「創建表」不能被回滾?
我寫了一個錯誤的sql,目的是使它成爲catch。
try {
tx.begin();
table1 t1 = new table1();
t1.setC1(c1);
t1.setC2(c2);
EntityManager em = emf.createEntityManager();
em.persist(t1);
Query query1= em.createNativeQuery("drop table if exists table2").executeUpdate();
Query query2= em.createNativeQuery("xxxxxxxxxxxxxxxx").executeUpdate();
tx.commit();
rt = true;
} catch (Exception e) {
try {
tx.rollback();
} catch (Exception e1) {
PUB.log(e, PUB.getLineInfo());
}
}
這裏是persistence.xml中,我使用Mysql5.6:
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MainSessionBean implements MainSessionBeanRemote {
@PersistenceUnit(unitName = "CC2016JPA2")
static EntityManagerFactory emf;
@Resource
UserTransaction tx;
謝謝Baao,其實我想回滾em.persist(t1),但這不是我擅長的。 em.persist()仍然有效。 – Jianspf