【问题标题】:EntityManager per DAO method每个 DAO 方法的 EntityManager
【发布时间】:2013-06-05 04:42:35
【问题描述】:

我对 EntityManager 的使用有疑问。 我读过这是不明智的,在单个线程中为每个简单的数据库调用打开和关闭一个 EntityManager!

每个 DAO 方法使用一个 EntityManager 还是每个 DAO 方法使用一个 EntityManager 更好?

【问题讨论】:

    标签: java hibernate entitymanager hibernate-entitymanager


    【解决方案1】:

    EntityManager 应该被创建,执行一个“工作单元”,然后被关闭。

    http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/#d0e980

    一个工作单元类似于:插入、更新、删除或一些更复杂的业务逻辑。您应该为每个方法获取一个新的 EntityManager 实例,因为每个方法都应该包含一个工作单元。

    更新:还有 Extended EntityManager 的概念,只要您的应用程序正在运行或会话处于打开状态,它就会保持打开状态。不过,这将由容器管理。

    【讨论】:

    • 是的,但如果调用两种方法,我会得到:transcation not active。那是因为我有两个不同的实体经理吗?
    • 如果您尝试跨两种方法进行事务,我相信您需要使用相同的实体管理器。
    【解决方案2】:

    我将简要解释一下Entity和DAO之间的关系。

    考虑一个主要由两个实体组成的在线船舶预订系统的例子

    1.Admin - 执行添加、修改、删除船舶详细信息等

    2.用户-在线预订船票,在线支付等

    在这种情况下,对于管理员实体(添加、修改、删除船舶详细信息 - 此实体可以执行的不同类型的功能)需要一个 AdminDAO,它将包含管理员实体可以执行的所有功能。

    从任何 java servlet 类调用此实体。

    简而言之,每个实体都需要一个 DAO。

    【讨论】:

    • 他们在谈论 EntityManager 类,而不是实体的概念。
    猜你喜欢
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2014-12-08
    • 2016-12-23
    • 2017-04-07
    • 2015-10-26
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多