现在,当我启动Spring Data JPA时,我的印象是Spring Data JPA是JPA规范的独立实现。原来我错了。
如果我理解正确的话,Spring Data JPA是Spring提供的一个抽象层,它在内部使用其他JPA提供者(例如Hibernate),所以通常如下所示:
应用程序-->Spring Data JPA-->Hiberate-->JDBC---->DB
我不认为它的名字是错误的(免责声明:我是项目负责人)。所有Spring数据项目都在其名称中列出了它们所基于的存储区或API。Spring Data JPA基本上是JPA的Spring Data,就像Spring Data MongoDB是MongoDB的Spring Data,就像Spring Batch是批处理应用程序的Spring,Spring Integration是集成项目的Spring。
请更正JPA的依赖关系图:
Application -> Spring Data JPA -> JPA <- Hibernate -> JDBC -> DataSource
-> — uses
<- — implements
MongoDB也是如此:
Application -> Spring Data MongoDB -> MongoDB Java driver -> MongoDB
我的项目中的三个模型对象(本文末尾的模型和存储库片段)之间确实存在关系。 当我调用时,它会触发三个select查询: (“sql”) (对我来说)那是相当不寻常的行为。在阅读Hibernate文档后,我认为它应该始终使用连接查询。当类中的更改为时,查询没有区别(使用附加选择进行查询),当更改为时,城市类的查询也一样(使用JOIN进行查询)。 当我使用抑制火灾时,有两种选择: 我的目标是在所有情况下
我一直在阅读JPA中关于的文章。根据文件: 我试图创建一个类似的场景,将新的电话集合设置为,其中父实体是Person。 下面是我的实体类。 入口方法是testFlow()。 hibernate.hibernateException:拥有实体实例:com.example.entity.person.phones不再引用具有cascade=“all-delete-orphan”的集合 如何测试的工作示
我正在使用100个实体(使用JHipster)设置一个新的Spring Boot API,我的问题是:鉴于我有一组存储库层方法,我希望我的所有存储库都能够调用这些方法。 我已经尝试制作所有接口来扩展('RepositoryQuery'是我默认的自定义接口名称后缀),然后使用特定于实体的类。请注意,所有的类扩展了一个泛型实现类,名为。 请注意,给定正则表达式中的“.*”代表我的持久实体集中的任何实体
我只想不使用xml,所以我需要非xml替代这些设置。这是我的POM。
我有一个JPA项目(Eclipse Link),工作正常,但我想持久化一个不是实体的类(或在相同的持久化上下文中不是实体),目前我持久化引用id,然后我执行调用以检索对象。我需要知道什么是最好的方式做到这一点…我不希望在bean中添加代码作为侦听器事件,因为我希望有一个干净的bean(构造、属性、不带注释的setter和getter), 我的想法是扩展PersistenceContext(但是,我
是否有方法查询JPA EntityManager是否分离给定实体?这篇SO帖子讨论了一个类似的问题,但并没有说明向JPA EntityManager查询实体分离状态的方法。我更喜欢JPA方式,否则会针对Hibernate。