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

JPA : antlr error with @ElementCollection @OrderBy #1473

Closed
AfshinHonari opened this issue Jan 28, 2022 · 6 comments · Fixed by #1476
Closed

JPA : antlr error with @ElementCollection @OrderBy #1473

AfshinHonari opened this issue Jan 28, 2022 · 6 comments · Fixed by #1476
Assignees
Labels
type: compatibility Native image compatibility issue
Milestone

Comments

@AfshinHonari
Copy link

AfshinHonari commented Jan 28, 2022

I have an issue when running native spring boot app on Gradle with nativeRun or bootBuildImage and then run on docker;
when the application is launching after checking JPA the following exception accrue and application is failed to launch
CharScanner; panic: ClassNotFoundException: antlr.CommonToken

pluings I used:
plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'org.springframework.experimental.aot' version '0.11.2'
id 'org.hibernate.orm'
}

build image config:
bootBuildImage {
builder = 'paketobuildpacks/builder:tiny'
environment = ['BP_NATIVE_IMAGE': 'true']
imageName='ahs441/vimage'
}

hibernate config:
hibernate {
enhance {
enableLazyInitialization = true
enableDirtyTracking = true
enableAssociationManagement = true
enableExtendedEnhancement = false
}
}

@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged or decided on label Jan 28, 2022
@bclozel
Copy link
Contributor

bclozel commented Jan 28, 2022

We're going to need more information to understand what's going on here. A complete stacktrace would help, but I suspect a minimal, sample application would be more helpful. Could you share a minimal repro app for this?

@bclozel bclozel added the status: waiting-for-feedback We need additional information before we can continue label Jan 28, 2022
@AfshinHonari
Copy link
Author

AfshinHonari commented Jan 28, 2022

The stacktrace is empty with only CharScanner; panic: ClassNotFoundException: antlr.CommonToken exception;
The dependencies are:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'

implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2',
        'io.jsonwebtoken:jjwt-jackson:0.11.2' 

implementation 'org.bouncycastle:bcprov-jdk15to18:1.70'

implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'

implementation platform('com.amazonaws:aws-java-sdk-bom:1.12.131')
implementation 'com.amazonaws:aws-java-sdk-s3'


implementation "com.github.kokorin.jaffree:jaffree:2021.12.30"
implementation 'net.jthink:jaudiotagger:3.0.1'

annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jpa'
annotationProcessor 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation('com.querydsl:querydsl-jpa:5.0.0')

implementation 'org.ocpsoft.prettytime:prettytime:5.0.2.Final'

implementation 'com.github.kavenegar:kavenegar-java:v2.0.1'

implementation 'org.springdoc:springdoc-openapi-ui:1.6.5'
implementation 'org.springdoc:springdoc-openapi-webmvc-core:1.6.5'
implementation 'org.springdoc:springdoc-openapi-security:1.6.5'
implementation 'org.springdoc:springdoc-openapi-native:1.6.5'

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr353'
implementation 'javax.json:javax.json-api'
implementation 'org.apache.johnzon:johnzon-core'
implementation 'com.google.firebase:firebase-admin:8.1.0'
implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.41'

and the error is:
Screen Shot 2022-01-28 at 15 07 58

OS is MacOS 12.1
Docker version 20.10.8, build 3967b7d
GraalVM : openjdk 17.0.2 2022-01-18 - GraalVM CE 22.0.0.2

@spring-projects-issues spring-projects-issues added status: feedback-provided Feedback has been provided and removed status: waiting-for-feedback We need additional information before we can continue labels Jan 28, 2022
@bclozel
Copy link
Contributor

bclozel commented Jan 28, 2022

There is no way for us to reproduce the problem with the information you've provided.

@bclozel bclozel added status: waiting-for-feedback We need additional information before we can continue and removed status: feedback-provided Feedback has been provided labels Jan 28, 2022
@AfshinHonari
Copy link
Author

Finally, I found this issue occurs when I use @orderby annotation in hibernate entity

@spring-projects-issues spring-projects-issues added status: feedback-provided Feedback has been provided and removed status: waiting-for-feedback We need additional information before we can continue labels Jan 28, 2022
@sdeleuze
Copy link
Contributor

I can reproduce by adding @ElementCollection @OrderBy private List<String> phoneNumbers; to data-jpa sample here.

@sdeleuze sdeleuze self-assigned this Jan 31, 2022
@sdeleuze sdeleuze added type: compatibility Native image compatibility issue and removed status: waiting-for-triage An issue we've not yet triaged or decided on status: feedback-provided Feedback has been provided labels Jan 31, 2022
@sdeleuze sdeleuze added this to the 0.11.3 milestone Jan 31, 2022
@sdeleuze
Copy link
Contributor

I have been able to get past this error by adding:

@TypeHint(types = {
		antlr.CommonToken.class,
		org.hibernate.persister.collection.BasicCollectionPersister.class
})

But I get the following error which lead me to think Antlr require more reflection configuration:

Caused by: org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.collection.BasicCollectionPersister
	at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:178) ~[na:na]
	at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:140) ~[na:na]
	at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:225) ~[na:na]
	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:303) ~[na:na]
	at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468) ~[na:na]
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[na:na]
	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[na:na]
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[data-jpa:5.3.15]
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[data-jpa:5.3.15]
	... 20 common frames omitted
Caused by: org.hibernate.HibernateException: Unable to parse order-by fragment
	at org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator.translate(OrderByFragmentTranslator.java:55) ~[na:na]
	at org.hibernate.sql.Template.translateOrderBy(Template.java:724) ~[na:na]
	at org.hibernate.persister.collection.AbstractCollectionPersister.<init>(AbstractCollectionPersister.java:575) ~[data-jpa:5.4.33]
	at org.hibernate.persister.collection.BasicCollectionPersister.<init>(BasicCollectionPersister.java:59) ~[data-jpa:5.4.33]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]
	at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:152) ~[na:na]
	... 28 common frames omitted
Caused by: java.lang.NullPointerException: null
	at org.hibernate.sql.ordering.antlr.OrderByFragmentParser.isFunctionName(OrderByFragmentParser.java:77) ~[na:na]
	at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.expression(GeneratedOrderByFragmentParser.java:685) ~[na:na]
	at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.sortKey(GeneratedOrderByFragmentParser.java:359) ~[na:na]
	at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.sortSpecification(GeneratedOrderByFragmentParser.java:249) ~[na:na]
	at org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser.orderByFragment(GeneratedOrderByFragmentParser.java:193) ~[na:na]
	at org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator.translate(OrderByFragmentTranslator.java:49) ~[na:na]

@christophstrobl @schauder Could you please take it from there?

@sdeleuze sdeleuze assigned schauder and christophstrobl and unassigned sdeleuze Jan 31, 2022
@sdeleuze sdeleuze changed the title ClassNotFoundException: antlr.CommonToken JPA : antlr error with @ElementCollection @OrderBy Jan 31, 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
6 participants