有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java就是javax。坚持不懈EntityManager线程安全

我在没有@PersistenceContext的may Dao层中使用EntityManager,但Dao方法正在调用标记为@Transactional的服务方法。我的问题是,我应该在dao层中使用EntityManager工厂,每次都让EntityManager保持线程安全,还是已经处理好了

Dao层:

@RequiredArgsConstructor
public class UserDaoImpl {

 private final EntityManager em;

 public void save(User user){
     em.persist(user);
 }
}

服务层:

@RequiredArgsConstructor
public class UserService {

 private final UserDao userDao;

 @Transactional
 public void save(User user) {
   userDao.save(user);
 }
}

Tnx


共 (2) 个答案

  1. # 1 楼答案

    只需将@PersistenceContext添加到实体管理器中,容器就会为您处理它,但是如果您不在JEE环境中,那么创建您自己的实体管理器工厂,但我认为在您当前的情况下,实体管理器仍然为空。此外,您还必须创建持久化单元XML文件,并注意事务类型。如果使用@PersistenceContext,则必须是JTA;如果要创建自己的实体管理器工厂,则必须是RESSOURCE_LOCAL