Skip to content
This repository was archived by the owner on Feb 23, 2023. It is now read-only.

Add support for EntityGraph #1619

Closed
pstrumni opened this issue May 23, 2022 · 1 comment
Closed

Add support for EntityGraph #1619

pstrumni opened this issue May 23, 2022 · 1 comment
Assignees
Labels
type: compatibility Native image compatibility issue
Milestone

Comments

@pstrumni
Copy link

I'm using spring-data-jpa with Hibernate. When I've added EntityGraph annotation to repository method and run code I got exception:

java.lang.IllegalArgumentException: The EntityGraph-Feature requires at least a JPA 2.1 persistence provider!
        at org.springframework.util.Assert.isTrue(Assert.java:121) ~[na:na]
        at org.springframework.data.jpa.repository.query.Jpa21Utils.tryGetFetchGraph(Jpa21Utils.java:103) ~[na:na]
        at org.springframework.data.jpa.repository.query.Jpa21Utils.getFetchGraphHint(Jpa21Utils.java:76) ~[na:na]
        at org.springframework.data.jpa.repository.support.DefaultQueryHints.lambda$getFetchGraphs$0(DefaultQueryHints.java:113) ~[na:na]
        at org.springframework.data.util.Optionals.lambda$null$5(Optionals.java:191) ~[na:na]
        at java.util.Optional.map(Optional.java:265) ~[na:na]
        at org.springframework.data.util.Optionals.lambda$mapIfAllPresent$6(Optionals.java:191) ~[na:na]
        at java.util.Optional.flatMap(Optional.java:294) ~[na:na]
        at org.springframework.data.util.Optionals.mapIfAllPresent(Optionals.java:191) ~[na:na]
        at org.springframework.data.jpa.repository.support.DefaultQueryHints.getFetchGraphs(DefaultQueryHints.java:112) ~[na:na]
        at org.springframework.data.jpa.repository.support.DefaultQueryHints.combineHints(DefaultQueryHints.java:106) ~[na:na]
        at org.springframework.data.jpa.repository.support.DefaultQueryHints.forEach(DefaultQueryHints.java:102) ~[na:na]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.applyQueryHints(SimpleJpaRepository.java:903) ~[springboot-jpa:2.7.0]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.applyRepositoryMethodMetadata(SimpleJpaRepository.java:897) ~[springboot-jpa:2.7.0]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:820) ~[springboot-jpa:2.7.0]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.getQuery(SimpleJpaRepository.java:798) ~[springboot-jpa:2.7.0]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:427) ~[springboot-jpa:2.7.0]
        at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:88) ~[springboot-jpa:2.7.0]
        at java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[na:na]
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[na:na]
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[na:na]
        at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[na:na]
        at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[na:na]
        at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:639) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[na:na]
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[na:na]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[na:na]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[na:na]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[na:na]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[na:na]
        at com.sun.proxy.$Proxy306.findAll(Unknown Source) ~[springboot-jpa:na]

I've checked implementation of org.springframework.data.jpa.repository.query.Jpa21Utils and find out that it throws this exception, because after aot compilation javax.persistence.NamedEntityGraph is not present.

Everything works with additional TypeHint:
@TypeHint(types = NamedEntityGraph.class)

I think it should work out-of-the-box without additional configuration. Could you fix it?

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged or decided on label May 23, 2022
@mhalbritter mhalbritter added type: compatibility Native image compatibility issue and removed status: waiting-for-triage An issue we've not yet triaged or decided on labels Jun 9, 2022
@mhalbritter mhalbritter added this to the 0.12.1 milestone Jun 9, 2022
@mhalbritter
Copy link
Contributor

Thank you for the report!

@mhalbritter mhalbritter self-assigned this Jun 13, 2022
@mhalbritter mhalbritter changed the title EntityGraph needs additional TypeHint Add support for EntityGraph Jun 14, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
type: compatibility Native image compatibility issue
Development

No branches or pull requests

3 participants