问题标签 [spring-data-jpa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - 当使用@TableGenerator 时,Hibernate 尝试创建相同的实体/表两次 - 如何避免它?
我将休眠与部署在 JBoss 6.0 上的 J2EE 应用程序一起使用。我的数据库是 Oracle 11i 和 Derby。为了生成主键(运行序列号),我在我的一个实体(PersonDTO)中使用@TableGenerator 注释 - 例如:
我已经为序列定义了所需的实体 - 比如:
就序列生成而言,一切正常。但是在创建实体期间(当我第一次部署 J2EE 应用程序时),我在 JBoss server.log 文件中看到以下错误,尽管我的所有实体/表最终都成功创建。
我相信这“不是”实际上是一个错误。看起来因为我引用EDIS_SEQUENCE
了 2 个实体 bean 的一部分,所以休眠尝试创建它两次。首先,部署 EdmSequenceDTO 时,其次,当 PersonDTO 引用EDIS_SEQUENCE
作为@TableGenerator
注释的一部分时。
在我的persistence.xml
文件中,我有hibernate.hbm2ddl.auto
value="update" 的属性。我需要有这个值而不是“create-drop”。
我想知道有什么办法可以避免hibernate报告的错误?
java - 没有 XML 的引导 Spring Data JPA
Java@Configuration
相当于什么:
在Spring Data JPA中?我试图摆脱 XML 配置以支持@Configuration
类,但是通过JpaRepositoryConfigDefinitionParser源阅读是没有结果的。
我能得到的最接近的是:
然而,该<repositories/>
标签的功能要强大得多:它会自动CrudRepository
为在 CLASSPATH 上找到的所有扩展接口创建 DAO 。此外,与默认的 Spring Data JPA 行为相反,我的解决方案似乎没有将事务应用于 DAO。
java - 为什么在 Spring Data JPA Repository 上的 save() 之后使用返回的实例?
这是代码:
来自 Spring Data JPA 项目的JpaRepository 。
这是测试代码:
结果如下:
这是来自 CrudReporsitory.save() javadoc:
保存给定的实体。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例。
这是 Spring Data JPA 中 SimpleJpaRepository 的实际代码:
那么,问题是为什么我们需要使用返回的实例而不是原始实例?(是的,我们必须这样做,否则我们将继续使用分离的实例,但是为什么)
原始的 EntityManager.persist() 方法返回 void,因此我们的实例附加到持久化上下文。传递帐户以保存到存储库时是否会发生一些代理魔术?是 Spring Data JPA 项目的架构限制吗?
mysql - 使用 Hibernate @SQLDelete 对所有实体进行软删除
我们有一个相当复杂的数据模型,并且在 MySQL 之上使用 Hibernate 和 Spring Data JPA。我们有一个基类,所有域对象都扩展它以最小化样板代码。我希望能够仅使用此类在我们所有的域对象中添加软删除功能。但是,@SQLDelete
需要子句中的表名:
有谁知道概括 SQLDelete 语句并允许扩展域对象填充它们自己的表名的方法?
java - spring data jpa中实现JpaRepository接口的repository可以返回sortedset吗?
我正在使用 Spring Data JPA 1.0.1。我定义了一个 JPA 存储库。我正在使用嵌入式数据库实现编写集成测试。当我的服务类调用我的存储库时,我得到以下异常
这是我的存储库实现
java - TransactionRequiredException:Spring Data JPA 没有正在进行的事务
我有一个Spring Data JPA应用程序,每当我尝试进行交易时,我都会得到javax.persistence.TransactionRequiredException: no transaction is in progress
.
我相信它与事务管理器或实体管理器工厂有关,但不能指望它。
这里有一个示例存储库,然后在此处创建了一个存储库工厂,我不确定是否需要...然后在此处使用它(第 34 行)。
上面有几件事是错误的,但我已经尝试修复它并且不能:
- 开始和提交事务是显式的。
bankRepository
应该是@Autowired
,但是当我这样做时,我得到了null
。但是,在这个测试用例中,它是自动装配的并且可以工作。
有没有人遇到过类似的问题并且知道发生了什么?非常感谢您花时间阅读本文。希望这个问题的答案能帮助其他人。
spring - 用于开发 GenericDao 的最佳 Spring API
我看到很多关于spring jpa的实现技术(jpatemplate、japdaosupport spring-data-jpa、native way entitymanager、HibernateSupport等),这是开发通用DAO的最佳技术,应该是干净的资源分配、事务管理和高表现 。什么是利弊
设想
- 实体 >70
- 网络应用和网络服务
- 未来的 osgi 支持和多个数据源
spring - 您如何在 Spring 容器之外使用 Spring Data JPA?
我正在尝试手动连接 Spring Data JPA 对象,以便我可以生成 DAO 代理(又名存储库)——而不使用 Spring bean 容器。
不可避免地,有人会问我为什么要这样做:因为我们的项目已经在使用 Google Guice(并且在 UI 上使用带有 GWT 的 Gin),并且我们不想维护另一个 IoC 容器配置,或者引入所有由此产生的依赖关系。我知道我们也许可以使用 Guice's SpringIntegration
,但这将是最后的手段。
似乎一切都可以手动连接对象,但由于没有很好的记录,我遇到了困难。
根据 Spring Data 用户指南,可以独立使用存储库工厂。不幸的是,该示例显示了RepositoryFactorySupport
哪个是抽象类。经过一番搜索,我设法找到了JpaRepositoryFactory
JpaRepositoryFactory
实际上工作得很好,除了它不会自动创建事务。事务必须手动管理,否则不会持久保存到数据库中:
问题原来是@Transactional
注释不是自动使用的,需要帮助TransactionInterceptor
值得庆幸的是,JpaRepositoryFactory
可以在返回之前通过回调向生成的 Repository 代理添加更多 AOP 建议:
这就是事情进展不顺利的地方。单步调试代码中的调试器,TransactionInterceptor
确实是在创建一个事务——但在错误的EntityManager
. SpringEntityManager
通过查看当前正在执行的线程来管理活动。执行TransactionInterceptor
此操作并看到线程没有活动EntityManager
绑定,并决定创建一个新绑定。
但是,这个 newEntityManager
与创建并传递给JpaRepositoryFactory
构造函数的实例不同,它需要一个EntityManager
. 问题是,我如何使TransactionInterceptor
和JpaRepositoryFactory
使用相同EntityManager
?
更新:
在写这篇文章时,我发现了如何解决这个问题,但它仍然可能不是理想的解决方案。我将将此解决方案作为单独的答案发布。我很高兴听到任何关于独立使用 Spring Data JPA 的更好方法的建议,而不是我解决它的方法。
jersey - Spring Data 让 spring 找不到 JAXRS 的 @Provider?
我正在使用 Spring + Jersey 来构建 API 服务。最近,我尝试将 Spring Data 合并到我的服务器中。我没有真正在我的运行代码中使用任何存储库,只需在我的 app.xml 中添加一行:
但 !我注意到我的 API 不工作,抱怨“找不到Java 类 xxx 和 Java 类型类 xxx 和 MIME 媒体类型 application/json 的消息正文编写器”
如果我删除 xml 中的“jpa:repositories ...”行,一切正常!并且,所有提供程序类都由 spring 注册:
但是,如果我在我的 XML 中添加“jpa:repositories...”行,则只注册“根资源类”:
所有JAXRS 的 @Provider都丢失了!
我不知道这是否是 Spring-Data 的错误?以及如何解决?
环境 :
服务器 :resin-4.0.25
相关依赖:
(我尝试添加 jersey-json ,但仍然无法正常工作)
java - 用于 Spring-Data-JPA 注释的 setMaxResults?
我正在尝试将 Spring-Data-JPA 合并到我的项目中。让我困惑的一件事是如何通过注释实现 setMaxResults(n) ?
例如,我的代码:
我只需one (and only one)
要从 otherObj 返回用户,但我找不到注释 maxResults 的方法。有人可以给我一个提示吗?
(mysql抱怨:
)
我找到了一个链接:https ://jira.springsource.org/browse/DATAJPA-147 ,我试过但失败了。现在好像不行了?为什么 Spring-Data 没有内置如此重要的功能?
如果我手动实现此功能:
我必须在 中实现大量预定义的方法CrudRepository
,这太糟糕了。
环境:spring-3.1、spring-data-jpa-1.0.3.RELEASE.jar、spring-data-commons-core-1.1.0.RELEASE.jar