我在ejb3上一直在研究有关hibernate的JPA 2。
所以我做了一个样本类来测试功能。我尝试过使用BMT交易但面临交易问题。
从下面的示例代码中,如果dosomething()
中出现问题,将抛出异常,因此将回滚UserTransaction。
但是,我发现即使抛出异常,编辑后的实体也会更新到DB。如果我在设置中缺少某些东西,有人能指出我吗?
@Stateless(mappedName = "MyManagementBean")
@Local
@TransactionManagement(TransactionManagementType.BEAN)
public class MyManagement implements MyManagementLocal,MyManagementRemote {
@PersistenceUnit(unitName="MyEjb") EntityManagerFactory emf;
@Resource UserTransaction utx;
@Resource SessionContext ctx;
/**
* Default constructor.
*/
public MyManagement () {
// TODO Auto-generated constructor stub
}
public void dosomething(String id) throws Exception
{
try {
utx.begin();
em = emf.createEntityManager();
Myline line = em.find(Myline.class, id);
line.setStatus("R");
em.flush();
utx.commit();
}
catch (Exception e) {
e.printStackTrace();
if (utx != null) utx.rollback();
throw e; // or display error message
}
finally {
em.close();
}
}
答案 0 :(得分:0)
例外的类型是什么?程序是否曾打过电话
utx.rollback();
试
e.printStackTrace();
if (utx != null) {
utx.rollback();
system.error.println("Rolled Back");
}
throw e; // or display error message