openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ravi Palacherla <ravi.palache...@oracle.com>
Subject ClasscastException when ClassCrietria is not used.
Date Mon, 20 Jul 2009 18:05:36 GMT
Hi All, 

I have an openJPA application with following entities: 

"Item" Entity with SINGLE_TABLE inheritance strategy. 
 DiscriminatorColumn on this ITEM_TYPE. 

"Book" and "Movie" entities extend "Item." 

"Artist" entity has 1-many relationship with "Book." 

The following results in classcastexception : 
Artist artist = em.find(Artist.class, "Herman Hess"); 
List<Book> books= artist.getBooks(); 

"artist.getBooks()" results in rows that contain both "Book" and"Movie" hence I get the following
classcast : 
Exception in thread "main" java.lang.ClassCastException: org.apache.openjpa.enhance.model$Movie$pcsubclass


When I add @ElementClassCriteria to the Artist to Book relationship then that resolves the
issue. 
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="artist") 
@org.apache.openjpa.persistence.jdbc.ElementClassCriteria 
public List<Book> books; 

The reason for this issue is : 
without @ElementClassCriteria the SQL generated is : 
SELECT t0.UID1, t0.ITEM_TYPE, t0.title, t0.PAGE_COUNT FROM ITEM t0 WHERE t0.ARTIST = ? 
[params=(String) Herman Hess] 

With @ElementClassCriteria the SQL generated is : 
SELECT t0.UID1, t0.ITEM_TYPE, t0.title, t0.PAGE_COUNT FROM ITEM t0 WHERE t0.ARTIST = ? AND
t0.ITEM_TYPE = ? 
[params=(String) Herman Hess, (String) BOOK] 

My questions regarding this is as follows: 

1) @ElementClassCriteria is an openJPA specific annotation. Can I have a JPA specific solution
for this problem ? 


2) If I have a very big application(s) and lots of relations with the above described behavior.

   Then do I have to add it to each and every entity class that has the relationship ? 
   Is there any property that I can define in the persistence.xml rather than in entities
? 

I have a simple testcase demonstrating the issue. 
I can upload it if needed. 

Regards, 
Ravi.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message