基本上,一种情况是存在带有Bean管理事务(BMT)的容器管理的JTA感知持久性上下文。
因此,除了你的EntityManager
你也应该注入,到你DataFetchBean
,你UserTransaction
,以开始,提交或回滚事务。
@Named
@RequestScoped
public class DataFetchBean {
@PersistenceContext
EntityManager em;
@Resource
private UserTransaction userTransaction;
...
}
然后,在您的addEmployee
方法中,您必须开始然后提交事务,以便对员工实体所做的更改可以传播到数据库。
public void addEmployee() throws Exception {
Employee employee = new Employee(500000, new Date(335077446), "Josh", "Carribean", 'm', new Date(335077446));
userTransaction.begin();
em.persist(employee);
userTransaction.commit();
}
尽管如此,您仍应考虑将数据库操作迁移到EJB中,然后将其注入到JSF bean中,因此将管理事务的责任委托给了容器,即使用CMT,而不是手动处理事务。