问题标签 [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.
spring - Spring数据JPA java.lang.IllegalArgumentException:不是实体
我已经创建了 spring data JPA 示例项目。为此,我使用了 eclips。有两个项目,一个是只有带注释的实体类的领域对象项目。其他项目是实际的 spring data jpa 项目,它对项目一具有依赖性。实际上它通过 maven 依赖获取域项目实体类。
项目 1:人力资源管理域
实体类:
项目 2:hrm-ws-service
持久性上下文.xml
所以我的包的设置如下:
src/main/java - 包含 spring 存储库
src/main/resources - 包含应用程序上下文
src/test/java - 包含单元测试
以及项目 1(hrm-domain)的依赖项
我的问题是当我运行这个项目时,我收到如下错误:
我想知道这个问题,因为当我将域对象(Employee.java)放在我的 spring 项目中时,它自己而不是单独的 jar 它工作正常。这个问题只发生在它作为一个单独的 jar 文件中。如果有人对这种情况有经验,请给我帮助。
spring - JPA 和 Hibernate 与基于 Spring 的 Web 应用程序的有效混合
我正在研究一个使用 Spring 和 JPA 的新 Web 应用程序。我想知道通过使用 org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter 的 jpaVendorAdapter,哪些 Hibernate 真正被使用或通过此配置可用(参见下面的配置)?
在搜索代码库的其余部分时,我只在代码中找到了对 Hibernate 的缓存引用的 POJO/实体。为什么在这里使用 Hibernate 缓存?是否有 JPA 选项可以替代对 Hibernate 的任何依赖?
Spring contextConfigLocation 文件摘录:
java - Spring JPA 数据的存储库
我正在尝试让 Spring JPA Data 为我工作,但一直在苦苦挣扎。这是问题所在。
我有两个域类,它们之间有一个简单的 OneToMany 关系:
我已经为每个类设置了 Repository 接口:CardRepository、UserRepository 扩展了 JpaRepository,这两个存储库都被注入到一个服务中
非常基本的设置。问题出现在 someMethod() 中,我用它的标识符查询了一个用户,然后尝试获取映射的 @OneToMany 列表,然后发生了 LazyInitialization 异常。
我不太确定我是否错过了那里的东西?好像只要repository的方法返回,entitymanager就关闭了;如果是这种情况,我想知道如何在不定义另一个存储库方法的情况下获得关系?
但是,如果我将@OneToMany 的获取设置为急切,那没问题,但这是我真的不想做的事情。
存储库的 delete() 似乎也有问题。如果我先删除一张卡,然后尝试 delete() 其拥有的用户(其列表中仍有该卡),则删除将失败,抱怨找不到该卡。但我没有设置从用户到卡的任何删除传播!
我希望有人可以解释实体管理器是如何在 JpaRepository 中使用的,这似乎使 Jpa 编程更加困难。我知道所有存储库都是自动生成的,但是如果有人可以指出它们是如何实现的,那将非常有帮助。
谢谢。武东
hibernate - Spring-data JPA 存储库通过在结果中丢失空值来排序
我正在使用 spring-data 和 jpa 存储库进行查询。我有一个问题,我有一个带有 ManyToOne 字段的实体,如果我在查询中按此字段排序,那么我的列表中不会返回该字段为 Null 的任何值。这似乎不是正确的行为。
这是我的实体的样子:
然后是 ManyToOne 用户实体
我有这样的 JPA 存储库:
我已经简化了很多代码,只是为了让您有所了解。所有查询都运行良好,当我在 Pageable 对象中设置 Sort 以对 owner_user_id 列进行排序时,问题就出现了。如果 item 表中的任何条目的 owner_user_id 为 null,则它们不会在列表中返回。
我可以添加某种注释来解决这个问题吗?或者我还能做些什么?我真的很想继续使用存储库,但如果我无法解决这个问题,我认为我不会。我正在使用休眠和 MYSQL,不确定这是否是问题的一部分。
谢谢。
java - 使用 SpringData 创建只读存储库
是否可以使用 Spring Data 创建只读存储库?
我有一些实体链接到视图和一些子实体,我想为它们提供一个带有一些方法的存储库,比如findAll()
,findOne()
以及一些带有@Query
注释的方法。我想避免提供像save(…)
and这样的方法,delete(…)
因为它们没有意义并且可能会产生错误。
谢谢!
spring - 使用 crudRepositoy 来自 DAO 的 NullPointerException
我使用 CrudRepository 得到了 java.lang.NullPointerException
我的项目如下所示:
strut2 动作
服务
存储库
领域
这是配置:
我是新来的,每次调用 Action 类时,都会注入服务,但 MyRepository 始终为空。
有人可以帮我吗,如果您需要更多信息,请告诉我,谢谢!
编辑 1
堆栈跟踪:
我也尝试过自己调试。我在 ServiceImpl 类上发现@Autowired MyRepository 存储库为空。
java - Spring Data JPA无效的page.sort参数
在将 Spring Data JPA 与 Hibernate 结合使用的 Web 应用程序中,我们利用Web 分页功能在各种实体列表中提供分页和排序功能。
这允许在呈现的 html 中将实体属性定义为特殊的排序请求参数,其中page.sort
值实际上与要排序的实体中的属性匹配。
这会产生一个结果 URL,例如:
问题是用户可能会修改 URL 以使用page.sort
引用不存在的列/属性名称的无效属性,或者更糟的是,使用导致无效语法的无效 JPA 查询字符。
例如,如果 URL 被修改为按“noSuchProperty”排序:
但是这个属性不存在,会抛出如下异常:
同样,如果 URL 被修改为无效的查询语法字符,例如“””:
会出现以下错误:
(还有第三种类型的异常会导致在org.hibernate.QueryException
Repository@Query
方法上显式定义。)
Spring Data JPA 抽象出这些参数的排序、分页和处理的细节;但是,它似乎不能优雅地处理这些场景(即指定了无效的排序参数)。
我们可以添加一些额外的自定义逻辑来验证实体上确实存在排序属性;但是,我想知道是否有一种更清洁、更集中的方法来做到这一点,这样我们就不会失去 Spring Data JPA 抽象的好处和简单性。我们在整个应用程序中使用这种排序功能与许多不同的实体,所以理想情况下,我们需要更多的通用方法,而不是必须显式定义或检查请求的每个实体页面的排序属性。
具体来说,我们实际上将 扩展PageableArgumentResolver
为接受控制器中提供的带注释的排序默认值(为简单起见,代码示例中未说明),因此我们只想回退到这个默认排序顺序,或者只是默认排序顺序对于实体,而不是抛出异常。
一些想法和尝试..我可以使用 aQueryCreationListener
来拦截查询创建并获取排序参数;但是,此时我实际上无法修改查询。或者,我可以扩展并使用自定义PageableArgumentResolver
(我们已经在这样做)来获取排序参数;但是,我当时无权访问该实体,也无法确定该实体是否实际上具有该名称的属性。我们可以显式声明支持的属性;然而,这再次破坏了集中和自动处理这种情况而不需要特定或声明的实体知识的想法。
是否有任何其他类型的拦截器或类似构造可用于集中验证可分页排序参数并在调用查询之前根据需要进行修改?或者 Spring 是否有任何类型的配置或方式可以自动处理这种情况,以便更优雅地处理无效的排序参数?
spring - 发生时如何处理 Spring JPA 存储库 SQL 错误?
在我的项目中,我使用 Sring JPA 存储库概念与数据库进行交互。现在存储库有许多内置的 CRUD 函数,如 Repository.save().. 它保存实体
现在在保存过程中,有时我会收到如下所示的 sql 错误并且保存操作失败: SQL 错误:
我关心的是如何在java代码中处理这些错误,因为我看不到这个方法抛出一些我可以处理这些错误的异常。
jsf-2 - 对象持有对 JPA 数据存储库(JSF 集成)的引用时出现 Spring Webflow 序列化错误
Spring Webflow:2.3.1
Spring Data:1.0.2
JSF:2.1.9
Primefaces:3.3.1
我正在尝试将 Spring Data JPA Repositories 与 JSF DataModel 结合起来,在这种情况下,Primefaces 与 LazyDataModel。这发生在使用 Spring Webflow 将 Spring 与 JSF 集成的 WebApp 中。
问题是当我在 Spring Webflow 的 ViewScope 中使用 LazyDataModel 中的 JpaRepository 时:
无法序列化流程执行;确保存储在流或闪存范围中的所有对象都是可序列化的 org.springframework.webflow.execution.repository.snapshot.SerializedFlowExecutionSnapshot.(SerializedFlowExecutionSnapshot.java:75)"
没有 LazyDataModel 中的 JpaRepository,我无法获得正确的页面并使用 spring 数据的分页模型。我已经找到了有同样问题的人,但不幸的是没有人回答:
感谢您提前提供帮助
最好的祝福
JSimas
java - 总是对 JPA @Id 使用原始对象包装器而不是原始类型?
我发现将原始类型用作 JPA 的对象 @Id 与 Spring Data JPA 结合使用的问题。我在父方与 Cascade.ALL 有父/子关系,并且子有 PK,同时也是父的 FK。
所以,当我运行时:
一切正常。但是我使用 Spring Data JPA 来持久化实体,所以我改为运行:
这个失败了,但有以下例外:
问题是 Spring Data JPA save()方法检查实体是否是新的,如果是新的,则使用 em.persist (),否则使用em.merge()。
这里有趣的部分是 Spring 如何检查实体是否是新的:
而且,当然,这是错误的,因为我使用 long 作为@Id 的类型,而 long 的默认值为 0。当我将 long 更改为 Long 时,一切也适用于 Spring Data JPA。
因此,建议的做法是始终对原始类型(如 Long 而不是 long)使用对象包装器而不是原始类型。任何将此描述为推荐做法的第三方资源都会非常好。