java - Spring PersistanceContext,EntityManager 并使用您的数据库
问题描述
我一直在开发一些基本的 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 数据库上进行开发,是否有区别?
- 链接到涵盖此内容的良好且最新的教程或书籍推荐,我在课堂上学习此内容,他们从未提及有关持久性上下文和实体管理的任何内容,因此我很困惑。
解决方案
spring DAO 有四种使用方式:
- JdbcTemplate + Spring DAO 支持(您将使用 JdbcTemplate 类)
- Hibernate+ Spring DAO 支持(你将使用 SessionFactory 类)
- JPA + spring DAO 支持(您将使用 EntityManager 类)
- JPA + Spring Data(DAO 的高级抽象)
JDBC、Hibernate、JPA,是独立的技术。如果你会学习hibernate
,你就会学会如何使用SessionFactory
。jpa
和相同EntityManager
。Spring Data是 spring 的另一个抽象,用于访问数据库。
有关 spring DAO 支持的更多信息,请查看此处的文档
推荐阅读
- android - 如何在sqlite的原始查询中使用交叉连接
- python - 是否可以拆分并将其余部分列出?
- xamarin - 是否需要检查 Xamarin 视图模型中是否已存在命令?
- c# - 如何使用 DownloadFileAsync 进度百分比更新 listView 中的文本?
- kubernetes - kubectl 无法访问新配置的 kubernetes 节点
- javascript - Laravel Ajax 419 生产错误,但不是本地开发,/storage/logs/laravel.log 中没有任何内容
- xml - 如何在骆驼的 sslContextParameter 中覆盖密钥库别名
- android - 列内的 ListView 导致“垂直视口被赋予无界高度”
- javascript - 如何在 Mapboxgl 中创建带有事件的自定义控件?
- python - Pandas/Pythonic 方法按列 X 分组,在每个组内,根据 Z 列中的值返回 Y 列中的值