问题标签 [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.

0 投票
1 回答
1516 浏览

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.autovalue="update" 的属性。我需要有这个值而不是“create-drop”。

我想知道有什么办法可以避免hibernate报告的错误?

0 投票
2 回答
3170 浏览

java - 没有 XML 的引导 Spring Data JPA

Java@Configuration相当于什么:

Spring Data JPA中?我试图摆脱 XML 配置以支持@Configuration类,但是通过JpaRepositoryConfigDefinitionParser源阅读是没有结果的。

我能得到的最接近的是:

然而,该<repositories/>标签的功能要强大得多:它会自动CrudRepository为在 CLASSPATH 上找到的所有扩展接口创建 DAO 。此外,与默认的 Spring Data JPA 行为相反,我的解决方案似乎没有将事务应用于 DAO。

0 投票
2 回答
71508 浏览

java - 为什么在 Spring Data JPA Repository 上的 save() 之后使用返回的实例?

这是代码:

来自 Spring Data JPA 项目的JpaRepository 。

这是测试代码:

结果如下:

这是来自 CrudReporsitory.save() javadoc:

保存给定的实体。使用返回的实例进行进一步的操作,因为保存操作可能已经完全改变了实体实例。

这是 Spring Data JPA 中 SimpleJpaRepository 的实际代码:

那么,问题是为什么我们需要使用返回的实例而不是原始实例?(是的,我们必须这样做,否则我们将继续使用分离的实例,但是为什么)

原始的 EntityManager.persist() 方法返回 void,因此我们的实例附加到持久化上下文。传递帐户以保存到存储库时是否会发生一些代理魔术?是 Spring Data JPA 项目的架构限制吗?

0 投票
2 回答
12089 浏览

mysql - 使用 Hibernate @SQLDelete 对所有实体进行软删除

我们有一个相当复杂的数据模型,并且在 MySQL 之上使用 Hibernate 和 Spring Data JPA。我们有一个基类,所有域对象都扩展它以最小化样板代码。我希望能够仅使用此类在我们所有的域对象中添加软删除功能。但是,@SQLDelete需要子句中的表名:

有谁知道概括 SQLDelete 语句并允许扩展域对象填充它们自己的表名的方法?

0 投票
1 回答
1437 浏览

java - spring data jpa中实现JpaRepository接口的repository可以返回sortedset吗?

我正在使用 Spring Data JPA 1.0.1。我定义了一个 JPA 存储库。我正在使用嵌入式数据库实现编写集成测试。当我的服务类调用我的存储库时,我得到以下异常

这是我的存储库实现

0 投票
4 回答
15043 浏览

java - TransactionRequiredException:Spring Data JPA 没有正在进行的事务

四处寻找类似的问题 但找不到解决方案:

我有一个Spring Data JPA应用程序,每当我尝试进行交易时,我都会得到javax.persistence.TransactionRequiredException: no transaction is in progress.

我相信它与事务管理器或实体管理器工厂有关,但不能指望它。

上下文文件在这里(最新签入在这里),但这里是重要的部分:

这里有一个示例存储库,然后在此处创建了一个存储库工厂,我不确定是否需要...然后在此处使用它(第 34 行)。

上面有几件事是错误的,但我已经尝试修复它并且不能:

  1. 开始和提交事务是显式的。
  2. bankRepository应该是@Autowired,但是当我这样做时,我得到了null。但是,在这个测试用例中,它是自动装配的并且可以工作。

有没有人遇到过类似的问题并且知道发生了什么?非常感谢您花时间阅读本文。希望这个问题的答案能帮助其他人。

0 投票
2 回答
455 浏览

spring - 用于开发 GenericDao 的最佳 Spring API

我看到很多关于spring jpa的实现技术(jpatemplate、japdaosupport spring-data-jpa、native way entitymanager、HibernateSupport等),这是开发通用DAO的最佳技术,应该是干净的资源分配、事务管理和高表现 。什么是利弊

设想

  • 实体 >70
  • 网络应用和网络服务
  • 未来的 osgi 支持和多个数据源
0 投票
2 回答
15080 浏览

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. 问题是,我如何使TransactionInterceptorJpaRepositoryFactory使用相同EntityManager

更新:

在写这篇文章时,我发现了如何解决这个问题,但它仍然可能不是理想的解决方案。我将将此解决方案作为单独的答案发布。我很高兴听到任何关于独立使用 Spring Data JPA 的更好方法的建议,而不是我解决它的方法。

0 投票
1 回答
1656 浏览

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 ,但仍然无法正常工作)

0 投票
8 回答
196459 浏览

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