我正在使用JPA为学校制作项目。我试图坚持一个对象,但我得到一个我无法解决的错误。我已经读过,我必须使用usertransaction而不是entitytransaction,但是在本课程中我们没有获得太多信息,所以我对这个主题知之甚少。如何修复此错误并能够保留它?
这是我得到的错误:
java.lang.IllegalStateException:
Exception Description: Cannot use an EntityTransaction while using JTA.
以下是我使用的代码:
public class UserServiceImpl implements UserService {
@PersistenceUnit
private EntityManagerFactory emf = null;
private EntityManager em = null;
@Override
public User register(User user) {
emf = Persistence.createEntityManagerFactory("Project_JavaPU");
em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(user);
em.flush();
em.getTransaction().commit();
em.close();
return user;
}
}
答案 0 :(得分:2)
我建议使用无状态EJB和容器管理的实体管理器来处理JTA的事务。见this Section in Java EE 6-Tutorial
容器管理只是通过更复杂的应用程序管理方式选择的简单方法,除非您有充分的理由这样做。
试试这个:
package containing.package;
import package.of.your.UserService
import java.io.Serializable;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class UserServiceImpl implements UserService, Serializable {
@PersistenceContext
EntityManager em;
@Override
public User register(User user) {
em.persist(user);
return user;
}
}