Skip to content
New issue

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

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

Already on GitHub? # to your account

HHH-18829 Auto generate record ID class if no explicit @IdClass #9220

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

cigaly
Copy link
Contributor

@cigaly cigaly commented Nov 8, 2024

Jira Issue HHH-18829

This is "sketch" of the problem solution on the side of Hibernate Processor.

TODO : Change Hibernate Core to use generated ID class.


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.


@cigaly
Copy link
Contributor Author

cigaly commented Nov 8, 2024

Last two commits are idea for potential solution on Hibernate Core side.

pw.println( ") {}" );
pw.println();
}
}
Copy link
Member

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.

Copy link
Contributor Author

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.

@cigaly
Copy link
Contributor Author

cigaly commented Nov 17, 2024

@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 org.hibernate.orm.test.annotations.derivedidentities.bidirectional.CompositeDerivedIdentityTest#testBidirectonalKeyManyToOneId. This one is failing on line 96:

        OrderLine orderLineGotten = session.get( OrderLine.class, orderLine );

Javadoc for org.hibernate.Session#get(java.lang.Class<T>, java.lang.Object) says that id parameter is "persistent instance or null". Here it is complete entity itself. I do not know if this may be acceptable, but same test will fail if comment is removed from @IdClass(OrderLinePK.class) in org.hibernate.orm.test.annotations.derivedidentities.bidirectional.OrderLine, so I have no reason to believe that this has been caused by PK changes.

The other failing test is org.hibernate.orm.test.boot.models.hbm.joinformula.JoinColumnAndFormulaTests#testHbmXmlTransformed. In mainbranch it is annotated with @FailureExpected because of the problem described in HHH-18384. For some reasons (unknown to me, at least for now), changes in this PR fix (at least partially) this problem, so exception has not been thrown. I've suggested solution to mentioned problem in PR #9273

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

Successfully merging this pull request may close these issues.

2 participants