【发布时间】:2019-02-24 17:14:39
【问题描述】:
我一直在开发一些基本的 Spring Web 应用程序,但在正确管理我的数据库方面遇到了一些麻烦。从现在开始,我一直在使用基本的 JPA 存储库,经典的 save() 和 findById(long id) 已经为我完成了这项工作。但是最近我注意到,当我从数据库中获取一个对象并对其进行更改时,它不会被持久化。这导致我搜索问题标题中的所有内容。我的发现真的让我很困惑,所以也许有人可以为我澄清一下:
- 我注意到有些人使用 Session(来自持久性)和 有些使用EntityManager。为什么?
- 有人说你必须注入一个EntityManagerFactory,并从那里得到一个EntityManager,这是真的吗?为什么?
- 我无法正确执行此操作,在遵循一两个指南之后,还有其他人想给我解释一下如何操作吗?
- 我已经看到 EntityManagerFactory 以一千种不同的方式注入(相当混乱),哪种方式最好?
- 我看过这个
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);这给了我一个 entityManager 可以使用,但我遇到了错误,有人说:With regards to the original question about obtaining an EntityManagerFactory in a non-spring setting. You simply call Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);,这个非弹簧设置是什么? - 如果我在一个简单的 H2 数据库或 mysql 数据库上进行开发,是否有区别?
- 链接到一个好的和最新的教程或一本书的推荐,涵盖这个,我在课堂上学习这个,他们从来没有提到任何关于持久性上下文和实体管理的东西,所以我很困惑。
【问题讨论】:
-
最近我注意到,当我从数据库中获取一个对象并对其进行更改时,它不会被持久化:只有当你从事务方法中这样做时才会发生这种情况。如果不这样做,那么一旦存储库方法返回,您加载的实体就会变为非托管(分离)。
-
所有这些似乎都是我已经知道该怎么做的事情。我对 entityManager 感兴趣,并且对实体进行操作并将其保存到数据库中。还是您的链接中有另一章我找不到?
-
如果您确实需要在 Spring 应用程序中获取 EntityManager,只需使用
@PersistenceContext EntityManager entityManager注入它。 docs.spring.io/spring/docs/current/spring-framework-reference/…
标签: java database spring persistence