[hibernate-issues] [Hibernate-JIRA] Created: (HHH-6100) Bug fix related to CriteriaQuery (JPA) when using XML mappings

JOUFFRE Nelly (JIRA) noreply at atlassian.com
Fri Apr 8 10:47:59 EDT 2011


Bug fix related to CriteriaQuery (JPA) when using XML mappings
--------------------------------------------------------------

                 Key: HHH-6100
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6100
             Project: Hibernate Core
          Issue Type: Patch
    Affects Versions: 3.6.2
         Environment: hibernate-(core, entitymanager...)-3.6.2.Final
hibernate-jpa-2.0-api-1.0.0.Final
MySQL 5.1
Spring 3.0.5.RELEASE 
            Reporter: JOUFFRE Nelly
            Priority: Critical


Hi,

I use XML mapping and wanted to implement the following query using CriteriaQuery.

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
Root<MyClass> objRoot = cq.from(MyClass.class);
List<MyClass> results = entityManager.createQuery(cq).getResultList();

(Actually my query is more complex than that but it was the first step.)

The first bug was that query generated the following jpql

select generatedAlias0 from null as generatedAlias0

This was because the org.hibernate.mapping.PersistentClass.jpaEntityName attribute was not set

Once I fixed it if tried to add a WHERE clause which was

cq.where(cb.equal(objRoot.get("embeddablePkId").get("embeddablePkIdAttribute"), "valueToSearch"));

which resulted into a NullPointerException because the org.hibernate.mapping.RootClass.declaredIdentifierProperty attribute was not set for simple and embeddable PK

Theses 2 attributes are well set but only when using annotation mappings because they are set via the AnnotationBinder.
In my case, with XML mapping, it calls the HbmBinder so these attributes are never set.

Here are my bug fixes, hope this help.
Cheers,

$ git diff
diff --git a/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java b/hib
index dd0e14a..4cacb8e 100644
--- a/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java
+++ b/hibernate-core/src/main/java/org/hibernate/cfg/HbmBinder.java
@@ -451,6 +451,7 @@ public final class HbmBinder {
                        prop.setValue( id );
                        bindProperty( idNode, prop, mappings, inheritedMetas );
                        entity.setIdentifierProperty( prop );
+                       entity.setDeclaredIdentifierProperty( prop );
                }

                // TODO:
@@ -484,6 +485,7 @@ public final class HbmBinder {
                        prop.setValue( id );
                        bindProperty( idNode, prop, mappings, inheritedMetas );
                        entity.setIdentifierProperty( prop );
+                       entity.setDeclaredIdentifierProperty( prop );
                }

                makeIdentifier( idNode, id, mappings );
@@ -564,6 +566,7 @@ public final class HbmBinder {
                        throw new MappingException( "Unable to determine entity
                }
                persistentClass.setEntityName( entityName );
+               persistentClass.setJpaEntityName( entityName );

                bindPojoRepresentation( node, persistentClass, mappings, inherit
                bindDom4jRepresentation( node, persistentClass, mappings, inheri
(END)

-- 
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