How can I help on HHH-9662 ? I have found that this fails with sequences too, when the composite identifier is another entity.
This works: @Id @Column(name = "registration_number") @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long registrationNumber; @Id @Column(name = "publisher_id") private Integer publisherId; but, this does not: @Id @Column(name = "registration_number") @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long registrationNumber; @Id @JoinColumn(name = "publisher_id") @ManyToOne private Publisher publisherId; -Jason > -----Original Message----- > From: hibernate-dev-boun...@lists.jboss.org > [mailto:hibernate-dev-boun...@lists.jboss.org] > On Behalf Of Jason Pyeron > Sent: Tuesday, April 21, 2020 9:23 AM > To: hibernate-us...@lists.jboss.org; hibernate-dev@lists.jboss.org > Subject: Re: [hibernate-dev] HHH-6044 / HHH-9662 and partial identifier > generation - No > part of a composite identifier may be null HibernateException > > Turns out this issue may be a duplicate of a known issue, taking this over to > the dev > list. > > > > org/hibernate/test/annotations/cid/CompositeIdIdentityTest.java: > > 7 package org.hibernate.test.annotations.cid; > > 48 @RequiresDialectFeature(DialectChecks.SupportsIdentityColumns.class) > > 49 @TestForIssue( jiraKey = "HHH-9662" ) > > 50 public class CompositeIdIdentityTest extends > BaseCoreFunctionalTestCase { > > 51 > > 52 @Test > > 53 @FailureExpected( jiraKey = "HHH-9662" ) > > 54 public void testCompositePkWithIdentity() throws Exception { > > 55 doInHibernate( this::sessionFactory, session -> { > > 56 Animal animal = new Animal(); > > 57 animal.setSubId( 123L ); > > 58 session.persist(animal); > > 59 } ); > > 60 } > > 61 > > 70 @Entity > > 71 @Table(name = "animal") > > 72 @IdClass(IdWithSubId.class) > > 73 public static class Animal { > > 74 > > 75 @Id > > 76 @GeneratedValue(strategy = GenerationType.IDENTITY) > > 77 private Long id; > > 78 > > 79 @Id > > 80 @Column(name = "sub_id") > > 81 private Long subId; > > 82 > > > > > > From: Jason Pyeron [mailto:jpye...@pdinc.us] > Sent: Tuesday, April 21, 2020 1:32 AM > To: 'hibernate-us...@lists.jboss.org' <hibernate-us...@lists.jboss.org> > Subject: HHH-6044 and partial identifier generation - No part of a composite > identifier > may be null HibernateException > > > > [note this is an issue with sequences too] > > > > Quoting > https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#i > dentifiers-composite-nonaggregated > > With non-aggregated composite identifiers, Hibernate also supports "partial" > generation of > the composite values. > > Example 135. @IdClass with partial identifier generation using @GeneratedValue > > > > I seem to be having the same issues as > https://hibernate.atlassian.net/browse/HHH-6044 > > > > I have existing tables / Entities (simplified): > > > > CREATE TABLE [cresaptown].[saar]( > > [id] [bigint] IDENTITY(1,1) NOT NULL primary key > > ); > > > > @Entity > > @Table(schema = "cresaptown", name = "saar") > > public class SystemAccessAuthorizationRequest > > { > > @Id > > @GeneratedValue > > Long id; > > } > > > > CREATE TABLE [cresaptown].[signature]( > > [rid] [bigint] IDENTITY(1,1) NOT NULL, > > [sid] [bigint] NOT NULL, > > PRIMARY KEY ([rid],[sid]), > > FOREIGN KEY([rid]) REFERENCES [cresaptown].[saar] ([id]) > > ); > > > > @Entity > > @Table(schema = "cresaptown", name = "signature") > > @IdClass(Signature.ID.class) > > public class Signature > > { > > @Id > > @Column(name = "sid") > > @GeneratedValue > > Long sid; > > > > @Id > > @JoinColumn(name = "rid") > > @ManyToOne > > SystemAccessAuthorizationRequest rid; > > > > public static class ID implements Serializable > > { > > Long sid; > > Long rid; > > } > > } > > > > A code fragment > > > > em.getTransaction().begin(); > > SystemAccessAuthorizationRequest saar = new > SystemAccessAuthorizationRequest(); > > em.persist(saar); > > Signature sig = new Signature(); > > sig.setRid(saar); > > em.persist(sig); > > em.getTransaction().commit(); > > > > gives this exception, but if I disable the null check in > AbstractEntityTuplizer.getIdentifier, I get the same issue as in HHH-6044 > > > > javax.persistence.PersistenceException: org.hibernate.HibernateException: No > part of a > composite identifier may be null > > at > org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) > > at > org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) > > at > org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) > > at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:716) > > at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:696) > > at x.Testclass.x(Testclass.java:38) > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > > at java.lang.reflect.Method.invoke(Unknown Source) > > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89 > ) > > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) > > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) > > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) > > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) > > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209) > > Caused by: org.hibernate.HibernateException: No part of a composite > identifier may be null > > at > org.hibernate.tuple.entity.AbstractEntityTuplizer$IncrediblySillyJpaMapsIdMappedIdentifier > ValueMarshaller.getIdentifier(AbstractEntityTuplizer.java:365) > > at > org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.jav > a:219) > > at > org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersist > er.java:5119) > > at > org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister > .java:4819) > > at > org.hibernate.engine.internal.ForeignKeys.isTransient(ForeignKeys.java:294) > > at > org.hibernate.event.internal.EntityState.getEntityState(EntityState.java:59) > > at > org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventList > ener.java:95) > > at > org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventList > ener.java:55) > > at > org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventL > istenerGroupImpl.java:102) > > at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:710) > > ... 25 more > > > > > > _______________________________________________ > hibernate-dev mailing list > hibernate-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/hibernate-dev _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev