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

Catalina Wei commented on OPENJPA-1547:
---------------------------------------

The patch looks good to me.

> NOT IN with MEMBER OF returns syntax error
> ------------------------------------------
>
>                 Key: OPENJPA-1547
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1547
>             Project: OpenJPA
>          Issue Type: Bug
>            Reporter: Fay Wang
>            Assignee: Fay Wang
>             Fix For: 2.1.0
>
>         Attachments: OPENJPA-1547.patch
>
>
> With the following entities:
> @Entity
> public class EntityA {
>       @Id
>       int id;
>       int age;
>       String name;
> }
> @Entity
> public class EntityB {
>       @Id
>       int id;
>       int age;
>        @PersistentCollection(fetch=FetchType.LAZY)
>       String[] nickNames;
> }
> OpenJPA generates wrong SQL for the JPQL:
>         String jpql = "SELECT a.name FROM EntityA a WHERE a.id not in " + 
>         "(select b.id FROM EntityB b where ?1 MEMBER OF b.nickNames)";
>  
> SELECT t0.name FROM EntityA t0 
> WHERE (0 = (SELECT COUNT(*) FROM  
>      WHERE (t0.id IN (
>           SELECT t1.id 
>              FROM EntityB t1 
>              INNER JOIN EntityB_nickNames t2 ON t1.id = t2.ENTITYB_ID 
>              WHERE (t2.element = ?) )) ))  [params=(String) token1]
> Note that if the JPQL is:
>         String jpql = "SELECT a.name FROM EntityA a WHERE a.id in " + 
>         "(select b.id FROM EntityB b where ?1 MEMBER OF b.nickNames)";
> The push-down sql is correct:
> SELECT t0.name FROM EntityA t0 
>       WHERE (t0.id IN 
>           (SELECT t1.id 
>               FROM EntityB t1 
>               INNER JOIN EntityB_nickNames t2 ON t1.id = t2.ENTITYB_ID 
>               WHERE (t2.element = ?) ));

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