Hi Mike, Please download the testcase from : http://n2.nabble.com/file/n3306514/openJPATestCase.zip openJPATestCase.zip
The following changes are needed : build.xml ( point to proper "basedir" and "<path id="libs">" ) persistence.xml ( jdbc configurations.) Regards, Ravi. Michael Dick wrote: > > 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. >> > > -- View this message in context: http://n2.nabble.com/ClasscastException-when-ClassCrietria-is-not-used.-tp3290568p3306514.html Sent from the OpenJPA Developers mailing list archive at Nabble.com.
