问题标签 [entitygraph]
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.
jpa - JPA实体图:除一个之外的所有属性
我有一个大约 30 个字段的产品实体。我喜欢使用 EntityGraph 来获取产品列表,但它的描述是 CLOB。
我必须向 EntityGraph 添加 29 个其他属性。有没有办法说:除了属性A之外的所有属性?
谢谢。
jpa - EclipseLink JPA:无法在报告查询中设置获取组
EclipseLink:无法在报表查询上设置提取组。
什么是报表查询?
https://docs.oracle.com/cd/B25221_04/web.1013/b13593/errcode006.htm
谢谢。
java - 如何在@NamedEntityGraph 的子图中仅加载指定的属性
我想从数据库加载一个 UserReference 对象,但从验证器属性我只想加载 id、firstName 和 lastName,这样 userReference 看起来像这样:
我为 UserReference 类使用了一个实体图,但我使用的实体图加载了用户拥有的所有信息,包括电子邮件、用户名、办公室和部门。有没有办法为子图指定像 EntityGraphType.FETCH 这样的东西,以便它只加载验证者的 id、firstName 和 lastName?
这是我的 UserReferenceRepository:
用户参考类:
和用户:
java - Spring Data JPA 实体图不适用于 Spring Boot
当应用基于 Spring Boot 时,不考虑定义的实体图。相反,在 JUnit 测试期间一切正常。
领域非常简单:书籍及其类别(多对多关系)。
书类:
分类类:
具有使用创建的实体图的方法的 JPA 存储库:
在 REST 控制器中的用法:
在启动 Spring Boot (mvn spring-boot:run) 并导航到http://localhost:8080/books后,会显示书籍,但会显示它们各自的类别(并且由于无限递归而引发异常:书籍 -> 类别 -> 书籍-> 类别 -> ...)。
测试中的相同代码(使用 SpringJUnit4ClassRunner 运行)按预期工作,并且可以正确识别实体图。例如,下面的代码没有显示类别,因为正如预期的那样存在延迟初始化:
当应用程序在 Spring Boot 上运行时如何让实体图工作有什么建议吗?
spring-data-jpa - .ClassCastException: org.hibernate.internal.SQLQueryImpl 不能转换为 org.hibernate.internal.QueryImpl
我正在尝试使用 EntityGraph 获取一些惰性集合
在我的实体上
存储库
使用本机查询时,我遇到了下一个异常
java.lang.ClassCastException: org.hibernate.internal.SQLQueryImpl 不能在 org.hibernate.jpa 的 org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:604) 中转换为 org.hibernate.internal.QueryImpl。 internal.QueryImpl.getSingleResult(QueryImpl.java:529) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl. java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:372) 在 com.sun.proxy.$ org.springframework.data.jpa.repository.query 中的 Proxy276.getSingleResult(Unknown Source)。JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:206) 在 org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:78) 在 org.springframework.data.jpa.repository.query.AbstractJpaQuery。 doExecute(AbstractJpaQuery.java:102) at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:92) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke( RepositoryFactorySupport.java:482) 在 org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)在 org.springframework。data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at ...... .....................在 org.apache.tomcat.util.threads.TaskThread$ WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)
使用 JPQL 查询时一切正常。但是我有很大的本地查询,转换为 JPQL 非常痛苦。有谁知道这种情况下的解决方法?将不胜感激任何帮助。
hibernate - jpa/hibernate 在自动 relashionship 中急切地加载整个链
我正在使用 JPA 实体图来急切地加载关系。
但是,我的问题是:
该关系是这样的自关系:
因此,当我从数据库中获取对象 X 时,孩子们也会加载。这是正确的。但是,当我得到 children Set 的第一个对象并得到他们的孩子时,hibernate 会在数据库中执行另一个查询。
我的实体类带有以下注释:
我的搜索是这样的:
任何想法?
hibernate - 在 OneToMany 关系的情况下使用 EntityGraph 重复结果
我决定在我最近开始的项目中使用 JPA 2.1 的实体图功能,但我遇到了一个问题。
当您在 ManyToOne 关系上扩展图表时效果很好,但对于 OneToMany,结果会重复,因为我的提供程序(Hibernate)使用左外连接。
我看到了一些解决方案,他们提出了 Distinct 关键字来解决这个问题,但我认为这是一个棘手的解决方案,即使我们如何获得下一级实体 Distinct。
我的意思是,如果我有 3 个实体 A、B 和 C,我将在 A 而不是 B 上使用 Distinct,其中 B 与 C 具有 OneToMany 关系,那么我们会在 A 中获得 B 的重复记录,依此类推
hibernate - 使用多个选择但没有 FetchType.EAGER 注释的渴望获取
List
我想在某些用例中急切地获取一对多的-s(但并非总是如此,所以@OneToMany(fetch=FetchType.EAGER)
不会很好),并且我还希望 JPA 使用单独的 SQL 选择来获取那些List
-s (每个选择一个List
,而不是每个List
项目一个),而不是 SQL 连接。那是因为笛卡尔积(我有两个独立的列表)。
您可能会认为我可以使用 JPA 2.1 实体图(毕竟这就是它的用途,以特别的方式将属性标记为渴望)或者left join fetch
使用 JPQL(或使用标准 API)不太优雅。但是这些似乎坚持使用 SQL 连接(在 的情况下并不奇怪left join fetch
),即使它们最终以 a 结尾MultipleBagFetchException
,它们也不会退回到List
在单独的 SQL 选择中获取一些 -s 。实际上我的案例也是一个多袋案例,但是在您将我重定向到使用Set
-s 等解决它之前,请注意前提是我不想要加入(太大的笛卡尔积)。现在,逗我一下,如果我用 注释List
属性@OneToMany(fetch=FetchType.EAGER)
,Hibernate 将足够聪明地获取List
-s 在单独的选择中避免多个包(另外我什至可以使用 Hibernate 的Fetch
注释强制执行此行为)。因此,JPA 2.1 实体图似乎无法兑现 ad-hoc 的承诺FetchType.EAGER
,因为它们的行为很像 ad-hoc fetch 连接,我们之前也已经有了。还是我错过了什么?
我突然想到,我应该parentEntity.getSomeList().size()
在初始查询之后调用,这次不会尝试急切获取列表,但问题是,我还需要急切获取列表项本身的一些属性,我无法指定上述调用的实体图。我也可以自己创建一个 JPA 查询,它只能通过所述急切获取获得“someList”(这些都没有问题),但是我怎样才能将结果列表放回parentEntity
?如果我调用parentEntity.setSomeList(fetchedList)
,parentEntity
就会变脏(尽管它不在关联的所有者端),所以它将是 SQL update-d (只是为了破坏最后修改时间和乐观锁定版本)。
java - 如何限制 Hibernate 实体图中使用的列
Hibernate 5.0.10 我定义了一个子图,如下所示:
@NamedSubgraph(name = "proc", attributeNodes = {
@NamedAttributeNode("name"),
@NamedAttributeNode("childTable1"),
@NamedAttributeNode("childTable2"),
@NamedAttributeNode("childTable3"),
@NamedAttributeNode("childTable4")
}),
问题是,当使用这个子图时,我得到了根表(存在名称)中定义的所有属性,而不仅仅是我指定的子图属性。有没有办法告诉hibernate不要去取那些孩子?我的查询看起来就像select rec from records rec join rec.proc
spring-data-jpa - 带有实体图的 Spring 数据分页
我需要将分页与使用实体图的自定义查询结合使用。我的存储库如下所示:
为了比较,我使用此方法和使用findAll
继承自的方法获取维护QueryDslPredicateExecutor
:
在数据库中有 3 个维护寄存器,当我使用页面大小为 1、2 和 50 的页面调用此方法时,我得到此日志。
根据日志,分页工作正常,但是当我使用我的存储库方法和继承findAll
方法时查询非常不同。
两个日志已被剪切以显示相关信息,在第二个查询中,实体图提示尚未使用,因为我无法为其提供 Predicate 对象,但我理解这不是我的问题。
有了这个结果,我知道使用我的存储库方法(第一个查询)我没有得到真正的分页,因为 spring 正在用正确的内容大小填充列表,并且查询没有limit
关键字。
对于第二个查询,我得到了一个真正的分页,因为数据库正在做这项工作。
根据 Spring Data参考,我应该能够使用自定义查询方法进行分页。
我关心的是性能,因为我不想在内存中加载太多数据,我需要在数据库级别完成真正的分页。
使用QueryDslPredicateExecutor
很好,但我无法为实体图设置提示。