-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
HHH-18829 Auto generate record ID class if no explicit @IdClass #9220
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
Conversation
|
Last two commits are idea for potential solution on Hibernate Core side. |
| pw.println( ") {}" ); | ||
| pw.println(); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is nice and simple, for sure, but it's kind-of a layer-breaker. It would be better to make a new subclass of AnnotationMeta for this, even though I admit that's a PITA.
[I don't love the architecture, but it's not terrible, and it's what we've inherited.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're right, but I think that generated ID class should be member of generated entity (or embeddable?) meta class. Then it should be implementing MetaAttribute which is less than half PITA :-)
Additional thing is that order of record components should be preserved. At least one test in core failed due to that.
0070126 to
424ba15
Compare
|
@gavinking Can you, please check those two tests that are now failing? I think that both are either wrong or hiding problem some other than something caused by changes in this PR. First one is Javadoc for The other failing test is |
7a06415 to
821a63a
Compare
|
@cigaly OK, so this makes perfect sense actually. Historically Hibernate already allowed you to have an entity class without an But now you're generating an What I would suggest is to simply |
|
OK, I've added It seems, according to both JPA specification and Hibernate User Guide that composite ID must be either |
|
Yes it's an ancient undocumented misfeature but occasionally it's sorta nice to not have to write a composite of class if you don't plan on loading the entity by id. I sometimes take advantage of it when I'm just playing around. |
|
Yes, backward compatibility ... on one side you must keep it, but on other you can live with it :-) Anyway, please correct me if I am wrong ... if we simplify and remove comment from with test should pass as it is passing when entity is used instead of id? Is that correct or I've missed something important? |
bb58e6f to
074cf68
Compare
|
@cigaly can you rebase this on |
|
@gavinking Squashed. There are no conflicts with main branch. All tests were passing on this branch, I am now running tests on merged branch. |
- Hibernate Processor - generate ID class in metadata class if entity not annotated with @IdClass;
order of record components must match order of properties in entity class
- Hibernate Core - check if ID class has been properly generated with preserved order of components
- Annotated existing test entity classes with @exclude when ID class can not be generated without causing compilation errors
- Hibernate Processor - create ID class in meta data class if entity class with more than
one ID component is not annotated with @IdClass; property order must be preserved
- Hibernate Core - if entity class has more than one ID component, but is not annotated with @IdClass
entity binder should try to use ID class from metamodel if generated
|
Thanks for your pull request! This pull request appears to follow the contribution rules. › This message was automatically generated. |
|
Merged, thanks Cedomir! |
Jira Issue HHH-18829
This is "sketch" of the problem solution on the side of Hibernate Processor.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license
and can be relicensed under the terms of the LGPL v2.1 license in the future at the maintainers' discretion.
For more information on licensing, please check here.
https://hibernate.atlassian.net/browse/HHH-18384