[ 
https://issues.apache.org/jira/browse/OPENJPA-2931?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Maxim Solodovnik resolved OPENJPA-2931.
---------------------------------------
    Fix Version/s: 4.2.0
         Assignee: Richard Zowalla
       Resolution: Fixed

> Comparing objects with composite keys through criteria API doesn't work in 
> joins
> --------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2931
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2931
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: criteria, query, sql
>    Affects Versions: 3.1.2
>            Reporter: Pawel Veselov
>            Assignee: Richard Zowalla
>            Priority: Major
>             Fix For: 4.2.0
>
>
> I'm relatively certain this affects downstream as well.
> This is probably incomplete/incorrect fix for OPENJPA-2631.
> I've added this test to TestCompositePrimaryKeys.java:
> {code:java}
>     public void testFindUsingCriteriaBuilderOnSubjectWithJoin() {
>         Subject sub = em.find(Subject.class, new SubjectKey(1, "Type"));
>         CriteriaBuilder builder = em.getCriteriaBuilder();
>         CriteriaQuery<SubTopic> cq = builder.createQuery(SubTopic.class);
>         Root<SubTopic> root = cq.from(SubTopic.class);
>         Join<SubTopic, Topic> join = root.join(SubTopic_.topic);
>         cq.where(builder.equal(join.get(Topic_.subject), sub));
>         root.fetch(SubTopic_.topic);
>         TypedQuery<SubTopic> query = em.createQuery(cq);
>         SubTopic found = query.getSingleResult();
>         Assert.assertNotNull(found);
>         Assert.assertEquals(Integer.valueOf(8), found.getId());
>     }
> {code}
> Having a basic additional entity SubTopic:
> {code:java}
> @Entity
> @Table(name = "SUB_TOPIC")
> public class SubTopic {
>     @Id
>       @Column(name = "ID")
>       private Integer id;
>       @ManyToOne(fetch = FetchType.LAZY)
>       private Topic topic;
>       public SubTopic() {
>       }
> }
> {code}
> The test fails with:
> {noformat}
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.openjpa.jdbc.kernel.exps.EqualExpression.appendTo(EqualExpression.java:89)
>       at 
> org.apache.openjpa.jdbc.kernel.exps.CompareEqualExpression.appendTo(CompareEqualExpression.java:113)
>       at 
> org.apache.openjpa.jdbc.kernel.exps.BindVariableAndExpression.appendTo(BindVariableAndExpression.java:61)
>       at 
> org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.buildWhere(SelectConstructor.java:313)
>       at 
> org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.evaluate(SelectConstructor.java:95)
>       at 
> org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.createWhereSelects(JDBCStoreQuery.java:372)
>       at 
> org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeQuery(JDBCStoreQuery.java:203)
>       at 
> org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeQuery(ExpressionStoreQuery.java:831)
>       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1060)
> {noformat}
> OPENJPA-2631 relies on the ClassMetadata being there for the evaluated paths, 
> but in case of joins, it's not set.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to