You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Francesco Chicchiriccò (JIRA)" <ji...@apache.org> on 2016/06/08 07:06:21 UTC

[jira] [Commented] (OPENJPA-2631) ClassCastException occurs when an equals comparison query is executed on an entity with an @EmbeddedId that contains more than one field.

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

Francesco Chicchiriccò commented on OPENJPA-2631:
-------------------------------------------------

Honestly, both the problem and the fix were not easy to understand, but I think I finally managed to do it :-)

AFAICT, the patch looks very good and solves a very nasty problem.

I have also applied your patch to trunk and verified that all tests are passing.

One question, though: I see this commented block in TestCompositePrimaryKeys:

        // This works:
        // Predicate subjectPredicate1 = builder.equal(subjectRoot.get(Subject_.key).get(SubjectKey_.subjectNummer),
        // subject.getKey().getSubjectNummer());
        // Predicate subjectPredicate2 = builder.equal(subjectRoot.get(Subject_.key).get(SubjectKey_.subjectTypeCode),
        // subject.getKey().getSubjectTypeCode());
        // Predicate subjectPredicate = builder.and(subjectPredicate1,subjectPredicate2);

Can you explain why you have left it there? Or, alternatively, why haven't you uncommented it?

Finally, minor stuff which can be easily adjusted:

2013  test  WARN   [main] openjpa.MetaData - The composite identity class "class org.apache.openjpa.persistence.embed.compositepk.SubjectIdClass" for entity "class org.apache.openjpa.persistence.embed.compositepk.SubjectWithIdClass" is not serializable.
2520  test  WARN   [main] openjpa.MetaData - The composite identity class "class org.apache.openjpa.persistence.embed.compositepk.SubjectIdClass" for entity "class org.apache.openjpa.persistence.embed.compositepk.SubjectWithIdClass" is not serializable.

Thanks!

> ClassCastException occurs when an equals comparison query is executed on an entity with an @EmbeddedId that contains more than one field.
> -----------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2631
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2631
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: criteria, query, sql
>    Affects Versions: 2.1.2, 2.2.3, 2.4.1
>            Reporter: Heath Thomann
>            Assignee: Heath Thomann
>         Attachments: OPENJPA-2631-2.1.x.patch
>
>
> Take the following entity:
> @Entity
> public class Subject implements Serializable {
> 	@EmbeddedId
> 	private SubjectKey key;
> .......
> Where SubjectKey is as follows:
> @Embeddable
> public class SubjectKey implements Serializable {
> 	private Integer subjectNummer;
> 	private String subjectTypeCode;
> ......
> As you can see we have a composite primary key.  With this, take this query:
> TypedQuery<Subject> query = em.createQuery("select s from Subject s where s = :subject", Subject.class);
> query.setParameter("subject", s);
> Subject s2 = query.getSingleResult();
> This query will yield the following exception:
> java.lang.ClassCastException: org.apache.openjpa.persistence.embed.compositepk.SubjectKey cannot be cast to 
> [Ljava.lang.Object;]
> at org.apache.openjpa.jdbc.kernel.exps.Param.appendTo(Param.java:149)
> If we execute a corresponding 'em.find' of Subject, this exception doesn't occur.  Furthermore, if you execute the same query for an entity with an @EmbeddedId that only contains one field, all will work as expected.  The issue here is with an equals query where the entity contains an @EmbeddableId with more than two fields.
> While investigating/debugging this issue, I've found further issues when creating the query using CriteriaBuilder; both with an @Embeddable and @IdClass composite PKs.  I will leave it as an exercise for the reader to view the attached test case to see how each issue can occur.  Each test method details what issue it recreated before the fixes to this issue.  I'm also attaching a patch with a proposed fix for the issues.  
> Thanks,
> Heath Thomann



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)