Hi Ravi, Could you upload the testcase you mentioned? This sounds like an interesting issue, not sure I have the full picture at the moment, but it might warrant a JIRA for further investigation.
-mike On Wed, Jul 22, 2009 at 4:43 PM, rpalache <[email protected]>wrote: > > Hi , > > Here is the cause of the issue: > > getSelectSubclasses() of ValueMappingImpl.java is checking for criteria. > > "return (_criteria) ? Select.SUBS_JOINABLE > : Select.SUBS_ANY_JOINABLE;" > > If criteria is selected then "Select.SUBS_JOINABLE" is returned which will > generate a select statement that has subclass criteria ( in my E.g: > t0.ITEM_TYPE = ? ) > > If criteria is not selected then "Select.SUBS_ANY_JOINABLE" is returned > which will not generate the above condition. > > So the question is if we have to make Select.SUBS_JOINABLE the default > behavior. > > I think throwing class cast exception is bad and hence the default behavior > need to be changed to Select.SUBS_JOINABLE. > > Thanks in advance, > Ravi. > > > rpalache wrote: > > > > 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. > > > > > > -- > View this message in context: > http://n2.nabble.com/ClasscastException-when-ClassCrietria-is-not-used.-tp3290568p3306077.html > Sent from the OpenJPA Developers mailing list archive at Nabble.com. >
