| An existing test case, org.hibernate.test.idclass.IdClassTest, maps an IdClass using an HBM mapping. Specifically, the composite ID with IdClass is mapped as:
<composite-id class="CustomerId" mapped="true">
<key-property name="orgName" column="org_name"/>
<key-property name="customerName" column="cust_name"/>
</composite-id>
There is a comment and JPA metamodel population is disabled: // the Customer entity has a composite id that is not embeddable ( not supported by JPA ). configuration.setProperty( AvailableSettings.JPA_METAMODEL_POPULATION, "disabled" ); The comment is incorrect, as the mapping does, in fact, map an ID class: CustomerId The IdClass is mapped by: <composite-id class="CustomerId" mapped="true"> The test only passes because it sets: hibernate.ejb.metamodel.population=disabled When the property value is changed to ignoreUnsupported or enabled, the test fails due to: org.hibernate.testing.junit4.CallbackException: org.hibernate.testing.junit4.BaseCoreFunctionalTestCase#buildSessionFactory at org.hibernate.testing.junit4.TestClassMetadata.performCallbackInvocation(TestClassMetadata.java:204) at org.hibernate.testing.junit4.TestClassMetadata.invokeCallback(TestClassMetadata.java:188) at org.hibernate.testing.junit4.TestClassMetadata.performCallbacks(TestClassMetadata.java:182) at org.hibernate.testing.junit4.TestClassMetadata.performBeforeClassCallbacks(TestClassMetadata.java:173) at org.hibernate.testing.junit4.BeforeClassCallbackHandler.evaluate(BeforeClassCallbackHandler.java:25) at org.hibernate.testing.junit4.AfterClassCallbackHandler.evaluate(AfterClassCallbackHandler.java:25) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) Caused by: java.lang.IllegalArgumentException: expecting IdClass mapping at org.hibernate.metamodel.internal.AttributeFactory$3.resolveMember(AttributeFactory.java:978) at org.hibernate.metamodel.internal.AttributeFactory$5.resolveMember(AttributeFactory.java:1036) at org.hibernate.metamodel.internal.AttributeFactory.determineAttributeMetadata(AttributeFactory.java:458) at org.hibernate.metamodel.internal.AttributeFactory.buildIdAttribute(AttributeFactory.java:128) at org.hibernate.metamodel.internal.MetadataContext.buildIdClassAttributes(MetadataContext.java:360) at org.hibernate.metamodel.internal.MetadataContext.applyIdMetadata(MetadataContext.java:290) at org.hibernate.metamodel.internal.MetadataContext.wrapUp(MetadataContext.java:199) at org.hibernate.metamodel.internal.MetamodelImpl.initialize(MetamodelImpl.java:230) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:461) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) at org.hibernate.testing.junit4.BaseCoreFunctionalTestCase.buildSessionFactory(BaseCoreFunctionalTestCase.java:113) at org.hibernate.testing.junit4.BaseCoreFunctionalTestCase.buildSessionFactory(BaseCoreFunctionalTestCase.java:100) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.hibernate.testing.junit4.TestClassMetadata.performCallbackInvocation(TestClassMetadata.java:201) ... 15 more |