【问题标题】:Two EntityGraph on same class is not working (EclipseLink)同一类上的两个 EntityGraph 不起作用(EclipseLink)
【发布时间】: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


【解决方案1】:

问题在于 Maven 版本。升级到新的 maven 版本,一切正常!

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多