-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hello Kevin,
We are using the current stable version of Geronimo AS. Yes, we are pre-enhancing your Entities. We now solved (or worked-around) the problem by inserting the following in our persistence.xml: <property name="openjpa.MetaDataFactory" value="jpa(Types=net.uniopt.domain.actual.ActualAction;...;net.uniopt.domain.usrmngmt.LoginUser)"/> Hope this helps catching the bug. Michael Kevin Sutter schrieb: > Hi Michael, > I see that you are running with 1.2.x of OpenJPA, so that's good. I thought > that the problem you are describing was resolved eons ago. It's one that I > hit very early on in my tenure with OpenJPA. So, either the problem still > has a window associated with it, or it was accidentally re-introduced. > > The problem is that the metadata associated with the Entities in the query > is not populated yet. You are forcing this metadata to get populated by > doing one of your tricks (doing a find before the query, for example). > > As I think about it more, maybe the "window" still exists in an application > server, but the original problem was resolved in standalone JSE mode. Not > sure. What application server are you using? Does it provide the necessary > hooks for a JPA provider so that OpenJPA can properly enhance the classes at > startup? > > I did a quick search in our JIRAs and found this one [1]. But, this seems > to be related to MappedSuperClasses and it seems to also fail in JSE. > > There are also several postings to our forums with similar results [2], but > I'm not sure if these are the exact same scenario as yours. Are you > pre-enhancing your Entities? Or, are you relying on the container hook to > do the dynamic enhancing? Or, are you relying on the runtime enhancement > (also known as sub-classing)? > > More questions than answers, but I really thought this issue was resolved a > long time ago... > Kevin > > > [1] https://issues.apache.org/jira/browse/OPENJPA-1043 > [2] > http://n2.nabble.com/Starting-OpenJPA-during-container-startup-td210725.html#a210725 > > http://n2.nabble.com/RE%3A-Problem-with-openjpa-enhancer---using-runtime-enhancement-td1608390.html#a1608390 > > On Mon, May 25, 2009 at 7:29 AM, Michael Simons > <[email protected]>wrote: > >> Hi, >> >> I've encountered a strange little problem here... When I do the >> following locally (in a simple application, not connected to an >> Application Server)... >> >> Query query = em.createQuery("select u from LoginUser u where u.login = >> :loginname and u.passwd = :pass"); //$NON-NLS-1$ >> //... setting Parameters... >> LoginUser user = null; >> try { >> user = (LoginUser)query.getSingleResult (); >> } catch (NoResultException noResult) { >> System.err.println("NoResult"); >> } >> >> ... it works fine, it'll get me the correct "LoginUser" object. But when >> I try the same thing in a stateful EJB, the problems start. I'll get the >> following error: >> >> <openjpa-1.2.1-r752877:753278 nonfatal user error> >> org.apache.openjpa.persistence.ArgumentException: An error occurred >> while parsing the query filter "select u from LoginUser u where u.login >> = :loginname and u.passwd = :pass". Error message: The name "LoginUser" >> is not a recognized entity or identifier. Known entity names: [] >> >> Funny thing, if I call something like... >> >> LoginUser user = (LoginUser)em.find(LoginUser.class, 1); >> >> ...before trying to create the query above, the whole thing will >> suddenly work, LoginUser seems to become a recognized Entity (which also >> shows, that my classes are correctly enhanced, that the EntityManager >> knows them correctly, etc.). It seems, that even though the >> EntityManager "knows" the LoginUser Entity (because I can "em.find(...)" >> it), it doesn't recognize it in a query. >> >> If I cast the Query to OpenJPAQuery and there set the ResultClass... >> >> if (query instanceof OpenJPAQuery) { >> OpenJPAQuery opq = (OpenJPAQuery)query; >> opq.setResultClass( LoginUser.class ); >> } >> >> ...it suddenly seems to work. The big question is: Why is this needed? >> Is there a setting I can put into the (OpenJPA)EntityManager, that it >> will automatically recognize all of its entities in queries? Or do I >> really have to cast to OpenJPAQuery everytime I do a query? >> >> Regards, >> >> Michael (The original author Florian did not get a response from the list, >> after >> subscription-verification) >> >> > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFKHCNx5aNR/9BakrgRAoRaAJ9j0zMzQ27KXLy/9XnwexR0Oz9AtwCdFVLK B7tHzJkC1V/zYjJTyWJUGCU= =bRbu -----END PGP SIGNATURE-----
