Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

hibernate-jpamodelgen fails to process the current Data 1.0.0-SNAPSHOT TCK code #1

Closed
starksm64 opened this issue Mar 25, 2024 · 30 comments

Comments

@starksm64
Copy link
Contributor

This is either a bug in the TCK code, or the hibernate-jpamodelgen annotation processor. Attempting to run the Data 1.0.0-SNAPSHOT fails as follows:

starksm@Scotts-Mac-Studio hibernate-data-tck % mvn test
[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------< org.hibernate:hiberate-data-tck >-------------------
[INFO] Building Hibernate Jakarta Data TCK Runner 1.0
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ hiberate-data-tck ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource from src/main/resources to target/classes
[INFO] 
[INFO] --- compiler:3.13.0:compile (default-compile) @ hiberate-data-tck ---
[INFO] Recompiling the module because of changed source code.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 74 source files with javac [debug release 17] to target/classes
Mar 25, 2024 3:27:59 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 6.5.0-SNAPSHOT
[INFO] Hibernate compile-time tooling 6.5.0-SNAPSHOT
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java:[79,63] incorrect parameter type 'java.lang.Iterable<ee.jakarta.tck.data.framework.read.only.AsciiCharacter>' is not annotated '@Entity'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.standalone.entity.Box'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/nosql/example/Catalog.java:[28,23] incorrect parameter type 'ee.jakarta.tck.data.standalone.nosql.example.Product' is not annotated '@Entity'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[41,13] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[44,15] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[50,13] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[53,15] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[56,13] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[59,10] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[62,10] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/web/validation/Rectangles.java:[36,60] incorrect parameter type 'java.lang.@jakarta.validation.Valid Iterable<ee.jakarta.tck.data.web.validation.Rectangle>' is not annotated '@Entity'
[ERROR] Problem with Filer: Attempt to recreate a file for type ee.jakarta.tck.data.framework.read.only._AsciiCharacter
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[3,43] <identifier> expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[3,69] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[4,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[5,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[6,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[7,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[8,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[9,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[10,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[11,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[12,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[13,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[14,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[15,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[16,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[17,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[18,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[57,31] ';' expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[57,32] invalid method declaration; return type required
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[57,61] ',', ')', or '[' expected
[INFO] 34 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.972 s
[INFO] Finished at: 2024-03-25T15:28:00-06:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project hiberate-data-tck: Compilation failure: Compilation failure: 
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java:[79,63] incorrect parameter type 'java.lang.Iterable<ee.jakarta.tck.data.framework.read.only.AsciiCharacter>' is not annotated '@Entity'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.standalone.entity.Box'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/nosql/example/Catalog.java:[28,23] incorrect parameter type 'ee.jakarta.tck.data.standalone.nosql.example.Product' is not annotated '@Entity'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[41,13] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[44,15] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[50,13] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[53,15] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[56,13] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[59,10] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[62,10] repository must be backed by a 'StatelessSession'
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/web/validation/Rectangles.java:[36,60] incorrect parameter type 'java.lang.@jakarta.validation.Valid Iterable<ee.jakarta.tck.data.web.validation.Rectangle>' is not annotated '@Entity'
[ERROR] Problem with Filer: Attempt to recreate a file for type ee.jakarta.tck.data.framework.read.only._AsciiCharacter
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[3,43] <identifier> expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[3,69] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[4,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[5,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[6,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[7,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[8,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[9,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[10,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[11,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[12,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[13,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[14,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[15,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[16,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[17,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[18,1] class, interface, enum, or record expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[57,31] ';' expected
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[57,32] invalid method declaration; return type required
[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java:[57,61] ',', ')', or '[' expected
[ERROR] -> [Help 1]
[ERROR] 
@gavinking
Copy link
Contributor

[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class
'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.standalone.entity.Box'

This looks like we need to compile with -parameters

[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/framework/read/only/AsciiCharacters.java:[79,63] incorrect parameter type 'java.lang.Iterable<ee.jakarta.tck.data.framework.read.only.AsciiCharacter>' is not annotated '@entity'

This looks like the TCK has not been updated to use List instead of Iterable

@gavinking
Copy link
Contributor

See jakartaee/data#591

@gavinking
Copy link
Contributor

[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/persistence/Catalog.java:[41,13] repository must be backed by a 'StatelessSession'

This is the TCK requiring something it has no right to require.

@gavinking
Copy link
Contributor

[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/standalone/nosql/example/Catalog.java:[28,23] incorrect parameter type 'ee.jakarta.tck.data.standalone.nosql.example.Product' is not annotated '@entity'

This is because you're running tests designed for NoSQL with a Hibernate-backed repo.

@starksm64
Copy link
Contributor Author

The TCK does pass in -parameters:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>${maven.compile.version}</version>
        <configuration>
          <source>17</source>
          <target>17</target>
          <compilerArgs>
            <arg>-parameters</arg>
          </compilerArgs>
        </configuration>
      </plugin>

and adding that to the tck runner pom does not change the errors:

[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'arg0' in entity class 'ee.jakarta.tck.data.standalone.entity.Box'

I'll see if I can find where the error is coming from.

@starksm64
Copy link
Contributor Author

This is because you're running tests designed for NoSQL with a Hibernate-backed repo.

Ok, I'll double check the tck property configurations to avoid those tests.

@gavinking
Copy link
Contributor

The TCK does pass in -parameters

Yeah I know but I question that this actually works: jakartaee/data#586

@starksm64
Copy link
Contributor Author

This is because you're running tests designed for NoSQL with a Hibernate-backed repo.

Ok, I'll double check the tck property configurations to avoid those tests.

That has been fixed by excluding the nosql source.

@gavinking
Copy link
Contributor

[ERROR] /Users/starksm/Dev/Jakarta/hibernate-data-tck/target/tck-sources/ee/jakarta/tck/data/web/validation/Rectangles.java:[36,60] incorrect parameter type 'java.lang.@jakarta.validation.Valid Iterable<ee.jakarta.tck.data.web.validation.Rectangle>' is not annotated '@entity'

This looks like a bug in my code.

@gavinking
Copy link
Contributor

gavinking commented Mar 25, 2024

This looks like a bug in my code.

Oh no, it's not, it's because the method signature in the TCK should be:

@Save
List<Rectangle> saveAll(@Valid List<Rectangle> entities);

My code is fine.

@starksm64
Copy link
Contributor Author

There is a problem with the generation of the target/generated-sources/annotations/ee/jakarta/tck/data/web/validation/Rectangles_.java file.

The start looks like the following where you can see an incorrect embedding of the @jakarta.validation.Valid annotation in the first import:

package ee.jakarta.tck.data.web.validation;

import ee.jakarta.tck.data.web.validation.@jakarta.validation.Valid Rectangle;
import jakarta.annotation.Generated;
import jakarta.annotation.Nonnull;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
...

This is related to the processing of the save Rectangle save(@Valid Rectangle entity); method on the Rectangles interface as some debugging of the annotation processor shows that a org.hibernate.processor.annotation.LifecycleMethod has been created with an entity field of "ee.jakarta.tck.data.web.validation.@jakarta.validation.Valid Rectangle"

This is the full state of the LifecycleMethod:

this = {LifecycleMethod@7044} 
 annotationMetaEntity = {AnnotationMetaEntity@7014} "AnnotationMetaEntity{element=ee.jakarta.tck.data.web.validation.Rectangles, members={findAll[]=org.hibernate.processor.annotation.CriteriaFinderMethod@8cf7455, session=org.hibernate.processor.annotation.RepositoryConstructor@43fa82c1, save.ee.jakarta.tck.data.web.validation.@jakarta.validation.Valid Rectangle=org.hibernate.processor.annotation.LifecycleMethod@4a6e6db0, _=org.hibernate.processor.annotation.DefaultConstructor@27051ae8}}"
 entity = "ee.jakarta.tck.data.web.validation.@jakarta.validation.Valid Rectangle"
 methodName = "save"
 parameterName = "entity"
 sessionName = "session"
 operationName = "upsert"
 addNonnullAnnotation = true
 iterateParameter = false
 returnArgument = true

@gavinking
Copy link
Contributor

gavinking commented Mar 25, 2024

Yeah, OK, I will take a look and sort that out tomorrow. (It's because it's an annotation of the type, and apparently the annotation processor APIs retain that when rendering a type as a string.)

The bug is I suppose at line 1198 of AnnotationMetaEntity where I have:

final String entity = parameterType.toString();

Apparently I will need to find a way to strip the annotation off of that.

There's a few other places I also use param.asType().toString(). I will need to be careful with all of them.

@starksm64
Copy link
Contributor Author

starksm64 commented Mar 26, 2024

So this is a bug in the toString() annotation processor code under Java SE 21. If I run under Java SE 17, the code is generated correctly sans the saveAll method due to the Iterable<Rectange> type. It also has something to do with the target ElementType in use as the jakarta.data.repository.By annotation is not handled badly under SE 21 if just the @Target(ElementType.PARAMETER) is used, but if I expand the target ElementTypes to those used by jakarta.validation.Valid, and run the TCK code through the tools annotation processor, you see this bad method signature for find(@By("thisCharacter") char ch, @By("hexadecimal") String hex)

Repository(ee.jakarta.tck.data.framework.read.only.AsciiCharacters) as kind:INTERFACE
...
        find(@jakarta.data.repository.By("thisCharacter") char,java.lang.@jakarta.data.repository.By("hexadecimal") String):METHOD

It is fine on the primitive type, but messed up on the String type. When run with Java SE 17 the output is fine with the full set of 'ElementType`s:

Repository(ee.jakarta.tck.data.framework.read.only.AsciiCharacters) as kind:INTERFACE
...
    find(@jakarta.data.repository.By("thisCharacter") char,@jakarta.data.repository.By("hexadecimal") java.lang.String):METHOD

@starksm64
Copy link
Contributor Author

The TCK does pass in -parameters

Yeah I know but I question that this actually works: jakartaee/data#586

The issue is that the api jar also needs to be compiled with -parameters. I have added that comment to the data issues. When that is added the error becomes:

[ERROR] no matching field named 'entities' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'entities' in entity class 'ee.jakarta.tck.data.framework.read.only.NaturalNumber'
[ERROR] no matching field named 'entities' in entity class 'ee.jakarta.tck.data.standalone.entity.Box'

@gavinking
Copy link
Contributor

gavinking commented Mar 26, 2024

It also has something to do with the target ElementType in use as the jakarta.data.repository.By annotation is not handled badly under SE 21 if just the @Target(ElementType.PARAMETER) is used

Right, it's what I was trying to say last night, it's because it's a TYPE_USE annotation, so in some sense, "part of the type".

So this is a bug in the toString() annotation processor code under Java SE 21. If I run under Java SE 17, the code is generated correctly

Ah, OK, that helps explain why I have not run into this before. Do you know if it's been reported?

@gavinking
Copy link
Contributor

One problem I have here is that the original "old" JPAMetaModelGenerator converted all types to strings and then processed them in ImportContextImpl.importType() via a hand-written parser. And I have not had time to rework any of that to use TypeMirrors directly instead. So it's a bit painful to work around this bug without just turning off the use or imports completely.

@gavinking
Copy link
Contributor

@starksm64 with hibernate/hibernate-orm#8044 you should get better info about those errors relating to inherited members.

@starksm64
Copy link
Contributor Author

We could just generate the source using Java SE 17 and then run the TCK with either 17 or 21. I have not found a bug report as yet, so I was going to create a small reproducer and submit one.

@gavinking
Copy link
Contributor

We could just generate the source using Java SE 17

Why exactly are we even using 21 here?

@gavinking
Copy link
Contributor

Screenshot 2024-03-26 at 5 48 15 PM

This is with two fixes to my implementation, and Java 17.

Those problem are all bugs in the TCK.

@gavinking
Copy link
Contributor

Of course, the next problem is going to be all those Query-by-Method-Name methods.

@starksm64
Copy link
Contributor Author

A ratifying compatible implementation will need to pass with both 17 and 21 for EE 11. If we just want to pass the TCK, it can be either.

@gavinking
Copy link
Contributor

OK, no problem, hibernate/hibernate-orm#8050 works around this bug, and validation annotations on repo method parameters now work perfectly.

@gavinking
Copy link
Contributor

Screenshot 2024-03-28 at 1 48 23 AM

This one is a bug/limitation in Hibernate 6 core.

@gavinking
Copy link
Contributor

@gavinking
Copy link
Contributor

OK, done. We are left with the unimplemented Query by Method Name methods.

Screenshot 2024-03-28 at 11 38 26 PM

@gavinking
Copy link
Contributor

So today I tried to get the tests running by marking all the query by method name methods with @Query and fixing/removing methods which are testing things not required by the spec (of which there were a few).

I eventually got to the point where all the repository implementations were generated correctly, and I believe that the errors I'm now seeing are not on my side.

Screenshot 2024-03-29 at 5 58 41 PM

Unfortunately, to get to this point, you'll need a heavily-patched version of the TCK.

@starksm64
Copy link
Contributor Author

starksm64 commented Mar 29, 2024 via email

@gavinking
Copy link
Contributor

@starksm64
Copy link
Contributor Author

This seems resolved, so I'll create a new issue for the next phase.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants