[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-5764) AssertionFailure: Unexpected nested component on the referenced entity when mapping a @MapsId

Karsten Wutzke (JIRA) noreply at atlassian.com
Tue Nov 30 14:03:13 EST 2010


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5764?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=39234#action_39234 ] 

Karsten Wutzke commented on HHH-5764:
-------------------------------------

See SSCCE. Use "ant run" from a shell.

> AssertionFailure: Unexpected nested component on the referenced entity when mapping a @MapsId
> ---------------------------------------------------------------------------------------------
>
>                 Key: HHH-5764
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5764
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: annotations, core, metamodel
>    Affects Versions: 3.6.0
>         Environment: Hibernate 3.6, JavaSE, HSQLDB, Ant (see SSCCE attached)
>            Reporter: Karsten Wutzke
>            Priority: Critical
>         Attachments: transmuc-hib-embeddedid-transitive-comp-pk-broken.zip
>
>
> I have three tables:
>     CREATE TABLE PostAddresses
>     (
>       contact_id INTEGER NOT NULL,
>       ordinal_nbr SMALLINT NOT NULL,
>       PRIMARY KEY (contact_id, ordinal_nbr)
>     );
>     CREATE TABLE Foos
>     (
>       contact_id INTEGER NOT NULL,
>       ordinal_nbr SMALLINT NOT NULL,
>       PRIMARY KEY (contact_id, ordinal_nbr),
>       FOREIGN KEY (contact_id, ordinal_nbr) REFERENCES PostAddresses
> (contact_id, ordinal_nbr)
>     );
>     CREATE TABLE Bars
>     (
>       contact_id INTEGER NOT NULL,
>       ordinal_nbr SMALLINT NOT NULL,
>       numba INTEGER NOT NULL,
>       PRIMARY KEY (contact_id, ordinal_nbr, numba),
>       FOREIGN KEY (contact_id, ordinal_nbr) REFERENCES Foos (contact_id,
> ordinal_nbr)
>     );
> Simple logic: Bars -> Foos -> PostAddresses all by (contact_id, ordinal_nbr),
> whatever it means.
> Here the six entity and respective composite key classes.
>     @Entity
>     @Table(name = "PostAddresses")
>     public class PostAddress implements Serializable
>     {
>         @EmbeddedId
>         private PostAddressId embeddedId;
>         ...
>     }
>     @Embeddable
>     public class PostAddressId implements Serializable
>     {
>         @Column(name = "contact_id")
>         private Integer contactId;
>         @Column(name = "ordinal_nbr")
>         private Integer ordinalNbr = 1;
>         ...
>     }
>     @Entity
>     @Table(name = "Foos")
>     public class Foo implements Serializable
>     {
>         @EmbeddedId
>         private FooId embeddedId;
>         @MapsId(value = "postAddressId")
>         @OneToOne
>         @JoinColumns(value = {@JoinColumn(name = "contact_id",
> referencedColumnName = "contact_id"), @JoinColumn(name = "ordinal_nbr",
> referencedColumnName = "ordinal_nbr")})
>         private PostAddress postAddress = null;
>         ...
>     }
>     @Embeddable
>     public class FooId implements Serializable
>     {
>         @Embedded
>         private PostAddressId postAddressId; //just one field!
>         ...
>     }
>     @Entity
>     @Table(name = "Bars")
>     public class Bar implements Serializable
>     {
>         @EmbeddedId
>         private BarId embeddedId;
>         ...
>     }
>     @Embeddable
>     public class BarId implements Serializable
>     {
>         @Embedded
>         private FooId fooId;
>         @Column(name = "numba")
>         private Integer numba;
>         ...
>     }
> It's really nothing special, Bar references Foo, Foo references PostAddress,
> all via composite key class. Since the foreign keys are composite and part of
> the PK, I must nest the ID classes into the ID classes. I thought this is
> correct. However, I get the following stack trace with Hibernate 3.6:
>     org.hibernate.AssertionFailure: Unexpected nested component on the referenced entity when mapping a @MapsId: tld.transmuc.model.Foo
>         at org.hibernate.cfg.CopyIdentifierComponentSecondPass.doSecondPass(CopyIdentifierComponentSecondPass.java:101)
>         at org.hibernate.cfg.Configuration.processSecondPassesOfType(Configuration.java:1424)
>         at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1388)
>         at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)
>         at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1477)
>         at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1096)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:278)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:362)
>         at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
>         at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
>         at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
>         at tld.transmuc.Main.main(Main.java:27)
>     Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: transmuc] Unable to configure EntityManagerFactory
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:374)
>         at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
>         at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
>         at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
>         at tld.transmuc.Main.main(Main.java:27)
>     Caused by: org.hibernate.AssertionFailure: Unexpected nested component on the referenced entity when mapping a @MapsId: tld.transmuc.model.Foo
>         at org.hibernate.cfg.CopyIdentifierComponentSecondPass.doSecondPass(CopyIdentifierComponentSecondPass.java:101)
>         at org.hibernate.cfg.Configuration.processSecondPassesOfType(Configuration.java:1424)
>         at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1388)
>         at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)
>         at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1477)
>         at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1096)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:278)
>         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:362)
>         ... 4 more
> Hibernate is telling me about a problem with the @MapsId annotation and the Foo class:
> org.hibernate.AssertionFailure: Unexpected nested component on the referenced entity when mapping a @MapsId: tld.transmuc.model.Foo
> It appears to be a bug. Even if I omit the @Embedded annotation from the ID classes, the exception is still there.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list