You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Dave Lamy (JIRA)" <ji...@apache.org> on 2010/02/11 23:56:28 UTC
[jira] Updated: (CAY-1391) EJBQL unable to reference PKs not mapped
as ObjAttributes
[ https://issues.apache.org/jira/browse/CAY-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dave Lamy updated CAY-1391:
---------------------------
Attachment: EJBQLSelectTranslatorTest.patch
EJBQLPathTranslator.patch
Attaching patches for both translator code as well as unit test
> EJBQL unable to reference PKs not mapped as ObjAttributes
> ---------------------------------------------------------
>
> Key: CAY-1391
> URL: https://issues.apache.org/jira/browse/CAY-1391
> Project: Cayenne
> Issue Type: Improvement
> Components: Core Library
> Affects Versions: 3.0RC2
> Reporter: Dave Lamy
> Attachments: EJBQLPathTranslator.patch, EJBQLSelectTranslatorTest.patch
>
>
> I hit a case where an ObjEntity that contained an auto-generated PK needed to be referenced by an EJBQL query. The PK is not mapped as an ObjAttribute.
> The specific query case is when trying to perform a COUNT query with criteria on a to-many association, such as:
> SELECT count(p) FROM Parent p JOIN p.children c WHERE c.age > 5
> The result in this case will be erroneous, as the generated SQL will count duplicated parent IDs across the cartesian join on the children.
> The SQL fix for this is to include a DISTINCT in the count, but requesting a count(distinct p) does not produce workable SQL. Ideally then, one could reference the PK of the parent.
> I've written a solution to this using an HQL-esque "id" property to be referenced in the select. Thus this statement will work properly:
> SELECT count(distinct p.id) FROM Parent p JOIN p.children c WHERE c.age > 5
> The code will attempt to use the "normal" ObjAttribute discovery method first; but failing that, if the last path component == "id" and the ObjEntity has a single PK then it will utilize the PK ObjAttribute from the ObjEntity.
> This code works on both my production test case as well as in the unit test. Please consider for inclusion in the next release, I hate monkey patches!
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.