【发布时间】:2013-06-05 04:42:35
【问题描述】:
我对 EntityManager 的使用有疑问。 我读过这是不明智的,在单个线程中为每个简单的数据库调用打开和关闭一个 EntityManager!
每个 DAO 方法使用一个 EntityManager 还是每个 DAO 方法使用一个 EntityManager 更好?
【问题讨论】:
标签: java hibernate entitymanager hibernate-entitymanager
我对 EntityManager 的使用有疑问。 我读过这是不明智的,在单个线程中为每个简单的数据库调用打开和关闭一个 EntityManager!
每个 DAO 方法使用一个 EntityManager 还是每个 DAO 方法使用一个 EntityManager 更好?
【问题讨论】:
标签: java hibernate entitymanager hibernate-entitymanager
EntityManager 应该被创建,执行一个“工作单元”,然后被关闭。
http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/#d0e980
一个工作单元类似于:插入、更新、删除或一些更复杂的业务逻辑。您应该为每个方法获取一个新的 EntityManager 实例,因为每个方法都应该包含一个工作单元。
更新:还有 Extended EntityManager 的概念,只要您的应用程序正在运行或会话处于打开状态,它就会保持打开状态。不过,这将由容器管理。
【讨论】:
transcation not active。那是因为我有两个不同的实体经理吗?
我将简要解释一下Entity和DAO之间的关系。
考虑一个主要由两个实体组成的在线船舶预订系统的例子
1.Admin - 执行添加、修改、删除船舶详细信息等
2.用户-在线预订船票,在线支付等
在这种情况下,对于管理员实体(添加、修改、删除船舶详细信息 - 此实体可以执行的不同类型的功能)需要一个 AdminDAO,它将包含管理员实体可以执行的所有功能。
从任何 java servlet 类调用此实体。
简而言之,每个实体都需要一个 DAO。
【讨论】: