Re: [hibernate-dev] HHH-6044 / HHH-9662 and partial identifier generation - No part of a composite identifier may be null HibernateException

andrea boriero <[email protected]>
Newsgroups gmane.comp.java.hibernate.devel
Message-ID <CAL00eSS3PcoZYqQThZtFo6uUSAa4zS6M+puOyCCqE+9dA9dxBQ@mail.gmail.com>
there is a PR related to this issue (
https://github.com/hibernate/hibernate-orm/pull/3105), you can try to
verify if it solves the problem

On Tue, 21 Apr 2020 at 16:15, Jason Pyeron <[email protected]> wrote:

> 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: [email protected] [mailto:
> [email protected]]
> > On Behalf Of Jason Pyeron
> > Sent: Tuesday, April 21, 2020 9:23 AM
> > To: [email protected]; [email protected]
> > 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:[email protected]]
> > Sent: Tuesday, April 21, 2020 1:32 AM
> > To: '[email protected]' <[email protected]>
> > 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
> > [email protected]
> > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
> _______________________________________________
> hibernate-dev mailing list
> [email protected]
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.