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

Reply via email to