【发布时间】:2021-04-30 12:37:09
【问题描述】:
我正在尝试在我的班级中添加第二个 EntityGraph。
@NamedEntityGraph( name = "foo.details", attributeNodes = {
@NamedAttributeNode("id" ),
@NamedAttributeNode( "bar" )})
@NamedEntityGraph( name = "foo.without.details",
attributeNodes = { @NamedAttributeNode( "id" ) } )
public class Foo{
存储库
@Override
@EntityGraph( value = "foo.without.details" )
Page<Foo> findAll(Predicate predicate, Pageable pageable );
如果我使用第二个 entityGraph 则会出现跟随错误
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-6114] (Eclipse Persistence Services - 2.7.8.v20201217-ecdf3c32c4): org.eclipse.persistence.exceptions.QueryException │
│ Exception Description: You must define a fetch group manager at descriptor (Foo) in order to set a fetch group on the query (null) │
│ Query: ReadAllQuery(referenceClass=Aspect sql="SELECT id FROM foo WHERE (description LIKE ? ESCAPE ? AND (tenant_id = ?)) ORDER BY id ASC") │
│ FetchGroup(foo.without.details){} │
│ at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:493) │
│ at com.querydsl.jpa.impl.AbstractJPAQuery.getResultList(AbstractJPAQuery.java:160)
我也尝试过,使用包装器注解'NamedEntityGraphs'并注解spring数据存储库。
@Override
@EntityGraph( attributePaths = "id" )
Page<Foo> findAll( Predicate predicate, Pageable pageable );
没有第二个 EntityGraph 一切正常:
启用了 Maven 的静态编织并启用了日志记录
有人知道怎么回事吗?
编辑:编织信息
[INFO] --- eclipselink-maven-plugin:2.7.5.1:weave (default) @
[INFO] Only entities from base packages 'foo' will be included in persistence.xml
[INFO] Entities found : 12
[INFO] persistence.xml location: [INFO] Eclipselink weaving completed
类文件
public class Foo implements PersistenceWeaved,PersistenceObject, PersistenceWeavedFetchGroups, PersistenceWeavedLazy, PersistenceWeavedChangeTracking
【问题讨论】:
-
注释似乎关闭 - 可能只是格式或错误复制+粘贴,或者您在课堂上弄错了。请参阅javaee.github.io/tutorial/persistence-entitygraphs003.html,它展示了如何在 NamedEntityGraphs 中拥有多个 NamedEntityGraph 定义,因为注释中的问题可能意味着它们根本没有被持久性单元拾取。如果您打开 EclipseLink 日志记录 wiki.eclipse.org/EclipseLink/Examples/JPA/Logging,这应该在日志中显示为警告和错误
-
嗨,克里斯,感谢您的回答。我尝试了这个注释,但没有任何改变。在 Java 8 之前需要这个包装器注解。从 Java 8 开始,不需要这个包装器注解。
-
“EntityGraph.EntityGraphType.FETCH”可能是个问题吗?我使用 EntityGraph.EntityGraphType.LOAD 它可以工作,但是随后选择了很多不必要的数据。如何检查编织是否正确?我在日志中看到 [INFO] --- eclipselink-maven-plugin:2.7.5.1:weave (default) @ [INFO] 只有来自基本包 'foo' 的实体才会包含在 persistence.xml [INFO] 找到的实体中: 12 [INFO] persistence.xml 位置:[INFO] Eclipselink 编织完成
标签: jpa spring-data-jpa eclipselink