Spring支持PersistenceContextType.EXTENDED吗?

发布于 2024-10-18 23:38:15 字数 111 浏览 5 评论 0原文

@Stateful EJB 可以使用 PersistenceContextType.EXTENDED 在多个事务中重用同一个 EntityManager。这对于实现对话范围很有用。 Spring对此有支持吗?

A @Stateful EJB can use PersistenceContextType.EXTENDED for reusing the same EntityManager across multiple transactions. This is useful in implementing conversational scopes. Does Spring have any support for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

回忆那么伤 2024-10-25 23:38:15

基于普通 JPA 实现 DAO

@PersistenceContext 注释有
一个可选的属性类型,其中
默认为
PersistenceContextType.TRANSACTION
这个默认值就是你需要的
接收共享的 EntityManager 代理。
另一种选择是,
PersistenceContextType.EXTENDED,是一个
完全不同的事情:这个
导致所谓的扩展
EntityManager,这不是
线程安全,因此不得使用
在并发访问的组件中
例如 Spring 管理的单例
豆。扩展EntityManagers
应该用在有状态的
例如,驻留在的组件
在一个会话中,生命周期为
EntityManager 未绑定到
当前交易,而不是
完全取决于应用程序。

所以不,听起来 Spring 不支持它们。

There is a short discussion of this in Implementing DAOs based on plain JPA:

The @PersistenceContext annotation has
an optional attribute type, which
defaults to
PersistenceContextType.TRANSACTION.
This default is what you need to
receive a shared EntityManager proxy.
The alternative,
PersistenceContextType.EXTENDED, is a
completely different affair: This
results in a so-called extended
EntityManager, which is not
thread-safe and hence must not be used
in a concurrently accessed component
such as a Spring-managed singleton
bean. Extended EntityManagers are only
supposed to be used in stateful
components that, for example, reside
in a session, with the lifecycle of
the EntityManager not tied to a
current transaction but rather being
completely up to the application.

So no, it doesn't sound like Spring supports them.

混浊又暗下来 2024-10-25 23:38:15

Spring 有一个带有静态工厂方法的特殊类,用于创建扩展实体管理器。请参阅 ExtendedEntityManagerCreator

此外,如果您注入 EntityManagerFactory 并调用 createEntityManager(SynchronizationType.SYNCHRONIZED) ,它将创建具有扩展持久性上下文的实体管理器(提交后不会自动分离实体)的交易)。

Spring has a special class with static factory methods for creation of extended entity managers. See ExtendedEntityManagerCreator

Also, if you inject an EntityManagerFactory and invoke createEntityManager(SynchronizationType.SYNCHRONIZED) it will create the entity manager with extended persistence context (it will not automatically detach entities after commit of transaction).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文