[ 
https://issues.apache.org/jira/browse/OPENJPA-1483?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12828262#action_12828262
 ] 

Catalina Wei commented on OPENJPA-1483:
---------------------------------------

Hi Fay,
1. for newly added unsupported messages, could you add message id to  
localizer.properties ?
2. could you move the block of the code in JDBCStoreQuery that handles the 
isCountDistinctMultiCols to SelectConstructor.evaluate() so that 
kernel.exp.Count visibility remains private at package level ?

> count (Distinct e) in JPQL gives wrong result when the id field is a compound 
> primary key
> -----------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1483
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1483
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 2.1.0
>            Reporter: Fay Wang
>             Fix For: 2.1.0
>
>         Attachments: OPENJPA-1483-2.patch, OPENJPA-1483.patch
>
>
> This is a fundamental problem with count when compound primary key is 
> involved. 
>       (1) If no relation navigation is involved:
>       String jpql = "SELECT COUNT (DISTINCT e) FROM G2 e";
>       With the property below:
>       <property name="openjpa.jdbc.DBDictionary"
>               value="db2(useWildCardForCount=true)" />
>       Openjpa will generate the following sql and return the correct count:
>       SELECT COUNT(*) FROM G2 t0  optimize for 1 row
>       (2) If there is relation navigation invloved:
>       String jpql = "SELECT COUNT (DISTINCT f1.g2) FROM F1 f1";
>       
>       The property of useWildCardForCount will not generate correct sql with 
> right result. However, given the object-relational impedance mismatch, there 
> is no corresponding SQL construct for count of multiple primary keys, and 
> there is no clean and generic solution to solve this problem. The only 
> workaround is to use native SQL with table expression:
>       SELECT COUNT(*)
>       FROM (SELECT DISTINCT G1.G1PK, G1.G2PK  FROM F1 t0 INNER JOIN G2 t1 ON 
> t0.G1PK = t1.G1PK AND t0.G2PK = t1.G2PK)) TX;    
>       Rather than giving a wrong answer, OpenJPA should give an Unsupported 
> exception.

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