[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6555) IdClass and mappedBy problem

Fabrice Daugan (JIRA) noreply at atlassian.com
Wed Nov 2 18:37:19 EDT 2011


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

Fabrice Daugan commented on HHH-6555:
-------------------------------------

Additional information :
- Reproduced in 3.6.6
- Still there in 3.6.8
- Workaround works
- Failed for a getResultList() w/o WHERE
- First "getResultList()" failed, but the next work on the same session for the same query.

> IdClass and mappedBy problem
> ----------------------------
>
>                 Key: HHH-6555
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6555
>             Project: Hibernate Core
>          Issue Type: Bug
>    Affects Versions: 4.0.0.Beta2, 3.6.6, 4.0.0.Beta4
>         Environment: Derby 10.8.1.2
>            Reporter: Piotr Gliźniewicz
>
> I have the following classes:
> {code}@Entity
> public class SimpleEntity {
>     @Id
>     private int id;
>     @OneToOne(cascade = CascadeType.ALL, mappedBy = "entityA")
>     private EntityConnection connection;
>     @OneToMany(cascade = CascadeType.ALL, mappedBy = "entityB")
>     private List<EntityConnection> otherConnections;
>     // accessors
> }{code}
> {code}@Entity
> @IdClass(EntityConnectionPK.class)
> public class EntityConnection {
>     @Id
>     @JoinColumn(name = "entity_a_id")
>     @OneToOne
>     private SimpleEntity entityA;
>     @Id
>     @JoinColumn(name = "entity_b_id")
>     @ManyToOne
>     private SimpleEntity entityB;
>     // accessors
> }{code}
> {code}public class EntityConnectionPK implements Serializable {
>     private int entityA;
>     private int entityB;
>     // accessors, equals, hashcode
> }{code}
> Executing the following query:
> {code}
> TypedQuery<SimpleEntity> q = em.createQuery("select e from SimpleEntity e where e.id = 1", SimpleEntity.class);
> SimpleEntity foundEntity = q.getResultList().get(0);
> {code}
> results in:
> {code}Exception in thread "main" java.lang.NullPointerException
> 	at org.hibernate.persister.entity.AbstractEntityPersister.loadByUniqueKey(AbstractEntityPersister.java:2200)
> 	at org.hibernate.type.EntityType.loadByUniqueKey(EntityType.java:661)
> 	at org.hibernate.type.EntityType.resolve(EntityType.java:441)
> 	at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:150)
> 	at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1012)
> 	at org.hibernate.loader.Loader.doQuery(Loader.java:889)
> 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
> 	at org.hibernate.loader.Loader.doList(Loader.java:2449)
> 	at org.hibernate.loader.Loader.doList(Loader.java:2435)
> 	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
> 	at org.hibernate.loader.Loader.list(Loader.java:2271)
> 	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470)
> 	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
> 	at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196)
> 	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1105)
> 	at org.hibernate.internal.QueryImpl.list(QueryImpl.java:100)
> 	at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:252){code}
> After some debugging I found that Hibernate ignores the mappedBy values and uses names with prepended "_identifierMapper". After changing the annotations to:
> {code}@Entity
> public class SimpleEntity {
>     @Id
>     private int id;
>     @OneToOne(cascade = CascadeType.ALL, mappedBy = "_identifierMapper.entityA")
>     private EntityConnection connection;
>     @OneToMany(cascade = CascadeType.ALL, mappedBy = "_identifierMapper.entityB")
>     private List<EntityConnection> otherConnections;
>     // accessors
> }{/code}
> the code works.
> Expected: the first example of SimpleEntity should work.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the hibernate-issues mailing list