]
Strong Liu reassigned HHH-6100:
-------------------------------
Assignee: Strong Liu
Bug fix related to CriteriaQuery (JPA) when using XML mappings
--------------------------------------------------------------
Key: HHH-6100
URL:
https://hibernate.onjira.com/browse/HHH-6100
Project: Hibernate ORM
Issue Type: Patch
Components: core
Affects Versions: 3.6.2, 4.1.0
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
Assignee: Strong Liu
Priority: Critical
Fix For: 4.1.1
Attachments: testmapping.zip
Original Estimate: 1h
Remaining Estimate: 1h
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.
For more information on JIRA, see: