Heath Thomann created OPENJPA-2631:
--------------------------------------

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


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)

Reply via email to