EntityManager初始化最佳实践

时间:2009-12-27 20:17:00

标签: java jpa entitymanager

使用EntityManager时,最好是使用PersistenceContext获取一个实例并在我的程序中传递它,还是应该多次使用依赖注入?

在我的应用程序中,每个客户端都将与有状态会话bean进行通信,并且每个bean在某些时候都需要使用EntityManager。 我想同时调用bean方法(但我甚至不确定)。 我如何保证以线程安全的方式使用EntityManager?有交易吗?每个bean中都有一个单独的实例吗?

很抱歉,如果这令人困惑,我是EJB / JPA的新手,我找不到任何解决我问题的材料。

2 个答案:

答案 0 :(得分:3)

使用@PersistenceContextEntityManager注入您的DAO课程。这些是将处理数据库操作的类。然后在所有其他(服务)类中注入您的DAO类。您的DAO应该是无状态bean(不需要远程接口,只需本地)

答案 1 :(得分:2)

是的,您应该将EntityManager个实例(每个线程/客户端请求都不同)注入有状态会话bean(不会同时调用,至少不会从不同的客户端调用)。

创建DAO类没有意义。 JPA已经是一个高级持久性API,它为您提供不同JPA实现之间的RDBMS独立性和可移植性。因此,DAO只会增加代码库的混乱。

对于交易,您实际上不需要做任何事情。会话bean中的业务方法默认具有“必需”事务属性,因此它们将始终在特定于客户端的事务中运行。