[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1088?page=c...
]
David commented on HHH-1088:
----------------------------
I came across this problem today. I have a composite key (legacy tables) but each row
contains a lot of data and we are doing some paging. We execute a query and store the
composite keys to the results in the user's session. Each page, we can grab the IDs
from the session and load the data from the database for that page.
Would be nice to fix this but here was my fix for anyone else that comes across this:
Assuming your composite key has an id of "id"
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id.col1"));
projList.add(Projections.property("id.col2"));
After the query...
while (results.next()) {
CompKeyId id = new CompKeyId (results.get(0), results.get(1));
}
IdentifierProjection does not work with composite keys
------------------------------------------------------
Key: HHH-1088
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-1088
Project: Hibernate Core
Issue Type: Bug
Components: query-criteria
Affects Versions: 3.1 rc2
Reporter: Max Muermann
Attachments: CompositeIdProjection.java, CriteriaLoader.java
When working with Criteria queries, the IdentifierProjection breaks if the entity has a
composite key.
In IdentifierProjection.java:
public String toSqlString(Criteria criteria, int position, CriteriaQuery criteriaQuery)
throws HibernateException {
StringBuffer buf = new StringBuffer();
String[] cols = criteriaQuery.getIdentifierColumns(criteria);
for ( int i=0; i<cols.length; i++ ) {
buf.append( cols[i] )
.append(" as y")
.append(position + i)
.append('_');
}
return buf.toString();
}
This method does not add commas as separators between the column names. Easily fixed by
adding
if (i<col.length-1)
buf.append(",");
as the last statement inside the loop.
However, this leads to another problem:
the type returned by IdentifierProjection.geType is the (single) type of the composite id
component. The query will however return the property values of the id component without a
mapping step.
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira