John, Would it be possible to get a zip of your project? Maybe just the two many-to-many entities, persistence.xml orm.xml (well, you said you don't have one)?
If you don't have time, or the code is otheriwse not sharable, I understand, no problem. I re-wrote my entities to use field access, rather then property access, to match your usage and I got rid of orm.xml and made my persistence.xml look what I think yours looks like, and yet, I am STILL getting the SAME error!! Now I am wondering if I am not using EMF, EM properly. Here's my test code: EntityManagerFactory emf = Persistence.createEntityManagerFactory("openjpa"); MarketData md = new MarketData(); md.setVendorName("Bloomberg"); md.setVendorId("XYZ1234"); md.setCurrencyCode("USD"); md.setType("ASE"); RiskFactor rf = new RiskFactor(); rf.setName("RF1"); rf.setSeq(new BigDecimal(1)); rf.setType("type1"); rf.setValue(new BigDecimal(1.23)); Set<RiskFactor> rfmd = new HashSet<RiskFactor>(); rfmd.add(rf); Set<MarketData> mdrf = new HashSet<MarketData>(); mdrf.add(md); rf.setMarketData(mdrf); md.setRiskFactors(rfmd); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(md); em.persist(rf); em.persist(rfmd); em.persist(mdrf); em.getTransaction().commit(); em.close(); 68 openjpa INFO [main] openjpa.Enhance - You have enabled runtime enhancement, but have not specified the set of persistent classes. OpenJPA must look for metadata for every loaded class, which might increase class load times significantly. 316 openjpa INFO [main] openjpa.Runtime - OpenJPA dynamically loaded the class enhancer. Any classes that were not enhanced at build time will be enhanced when they are loaded by the JVM. 533 openjpa INFO [main] openjpa.Runtime - Starting OpenJPA 2.2.0 605 openjpa INFO [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.OracleDictionary". Exception in thread "main" <openjpa-2.2.0-r422266:1244990 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance "[persistdemo.ojpa.entities.RiskFactor@48082751] [java.util.HashSet]" to PersistenceCapable failed. Ensure that it has been enhanced. FailedObject: [persistdemo.ojpa.entities.RiskFactor@48082751] [java.util.HashSet] On Mon, Nov 19, 2012 at 11:46 AM, Boblitz John <john.bobl...@bertschi.com> wrote: > Oh, sorry - A line got dropped ... > > I meant to say that I do NOT have > > <mapping-file>META-INF/orm.xml</mapping-file> > <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/> > <property name="openjpa.MetaDataFactory" > value="jpa(Types=java.util.ArrayList)"/> > > in my persistence.xml ... > > > >> -----Ursprüngliche Nachricht----- >> Von: Chris Wolf [mailto:cwolf.a...@gmail.com] >> Gesendet: Montag, 19. November 2012 17:44 >> An: users@openjpa.apache.org >> Betreff: Re: cannot persist m2m data, getting >> "ArgumentException: Attempt to cast instance xxx >> [java.util.HashSet]" to PersistenceCapable failed. Ensure >> that it has been enhanced." >> >> So you have <mapping-file>META-INF/orm.xml</mapping-file> in >> your persistence.xml, but the file "orm.xml" actually does not exist? >> >> Unless you were just quoting a piece of the persistence.xml I sent? >> >> Also do you have your entities declared via <class></class> >> in your persistence.xml? >> >> Thanks, >> >> -Chris >> >> On Mon, Nov 19, 2012 at 11:06 AM, Boblitz John >> <john.bobl...@bertschi.com> wrote: >> > FYI. >> > >> > My persitence xml is essentially the same as yours. >> > >> > <mapping-file>META-INF/orm.xml</mapping-file> >> > <property name="openjpa.RuntimeUnenhancedClasses" >> value="supported"/> >> > <property name="openjpa.MetaDataFactory" >> > value="jpa(Types=java.util.ArrayList)"/> >> > >> > Nor do I have an ORM.XML. >> > >> > I also do build time enhancement via ANT. >> > >> > John >> > >> >> -----Ursprüngliche Nachricht----- >> >> Von: Chris Wolf [mailto:cwolf.a...@gmail.com] >> >> Gesendet: Montag, 19. November 2012 17:02 >> >> An: users@openjpa.apache.org >> >> Betreff: Re: cannot persist m2m data, getting >> >> "ArgumentException: Attempt to cast instance xxx >> [java.util.HashSet]" >> >> to PersistenceCapable failed. Ensure that it has been enhanced." >> >> >> >> Thanks José, see my reply to Rick - it has my persistence.xml and >> >> orm.xml attached... >> >> >> >> -Chris >> >> >> >> On Mon, Nov 19, 2012 at 10:57 AM, José Luis Cetina >> >> <maxtorz...@gmail.com> wrote: >> >> > I'm doing build-time enhancement. >> >> > >> >> > Send your persistence.xml >> >> > El 19/11/2012 09:50, "Chris Wolf" <cwolf.a...@gmail.com> >> escribió: >> >> > >> >> >> I choose property access over field access due to the >> >> caveats listed >> >> >> at the bottom of this page: >> >> >> >> >> >> >> >> >> >> >> >> http://openjpa.apache.org/builds/1.0.4/apache-openjpa-1.0.4/docs/manu >> >> >> al/ref_guide_pc_enhance.html >> >> >> >> >> >> ...not that is matters, really, since my entities *are* >> enhanced >> >> >> (just not java.util.ArrayList). >> >> >> >> >> >> I would be curious to see your persistence.xml and orm.xml >> >> and if you >> >> >> are doing runtime enhancement or build-time enhancement.... >> >> >> >> >> >> Thanks, >> >> >> >> >> >> -Chris >> >> >> >> >> >> On Mon, Nov 19, 2012 at 10:37 AM, Boblitz John >> >> >> <john.bobl...@bertschi.com> wrote: >> >> >> > Actually, mine works just fine! >> >> >> > >> >> >> > I choose to annotate the attributes instead of the >> methodes, but >> >> >> > here is >> >> >> an example: >> >> >> > >> >> >> > @Entity >> >> >> > @Table(name = "UserGroup") >> >> >> > public class UserGroup extends BaseEntity { >> >> >> > >> >> >> > [snip] >> >> >> > >> >> >> > @ManyToMany(mappedBy = "userGroups") >> >> >> > private Set<Users> users; >> >> >> > >> >> >> > } >> >> >> > >> >> >> > @Entity >> >> >> > @Table(name = "Users") >> >> >> > public class Users extends BaseEntity { >> >> >> > >> >> >> > [snip] >> >> >> > >> >> >> > @ManyToMany >> >> >> > @JoinTable(name = "UserGroupMember", joinColumns = >> >> >> @JoinColumn(name = "userid"), inverseJoinColumns = >> >> @JoinColumn(name = >> >> >> "groupid")) >> >> >> > private Set<UserGroup> userGroups; >> >> >> > >> >> >> > } >> >> >> > >> >> >> > >> >> >> > >> >> >> > >> >> >> >> -----Ursprüngliche Nachricht----- >> >> >> >> Von: Chris Wolf [mailto:cwolf.a...@gmail.com] >> >> >> >> Gesendet: Montag, 19. November 2012 16:29 >> >> >> >> An: users@openjpa.apache.org >> >> >> >> Betreff: Re: cannot persist m2m data, getting >> >> >> >> "ArgumentException: Attempt to cast instance xxx >> >> >> >> [java.util.HashSet]" to PersistenceCapable failed. >> >> Ensure that it >> >> >> >> has been enhanced." >> >> >> >> >> >> >> >> José, >> >> >> >> >> >> >> >> The plugin doc says you can have a comma-delimited list of >> >> >> >> classes, however, since enhancement on collection >> >> classes doesn't >> >> >> >> seem to work anyway - per your suggestion, I removed >> >> >> >> "java.util.ArrayList" and re-ran the "mvn >> >> openjpa:enhance" command. >> >> >> >> >> >> >> >> The result, as ever, is still: >> >> >> >> >> >> >> >> 771 openjpa INFO [main] openjpa.Enhance - Creating >> >> subclass and >> >> >> >> redefining methods for >> >> >> >> "[class java.util.ArrayList]". This means that your >> application >> >> >> >> will be less efficient than it would if you ran the OpenJPA >> >> >> >> enhancer. >> >> >> >> Exception in thread "main" >> <openjpa-2.2.0-r422266:1244990 fatal >> >> >> >> user error> >> >> >> >> org.apache.openjpa.persistence.ArgumentException: No >> registered >> >> >> >> metadata for type "class java.util.ArrayList". >> >> >> >> This can happen if this class has not been annotated as a >> >> >> >> persistent entity or specified in the persistence unit (ex: >> >> >> >> in the orm.xml). >> >> >> >> >> >> >> >> I wonder if anyone knows of a working example of >> >> many-to-many ORM >> >> >> >> using OpenJPA? >> >> >> >> >> >> >> >> Thanks, >> >> >> >> >> >> >> >> -Chris >> >> >> >> >> >> >> >> >> >> >> >> On Mon, Nov 19, 2012 at 10:19 AM, José Luis Cetina >> >> >> >> <maxtorz...@gmail.com> wrote: >> >> >> >> > And I think you don't have to set arraylist class or any >> >> >> >> java "native" >> >> >> >> > class as enhance class. Only your entities have to be >> >> enhancement. >> >> >> >> > El 19/11/2012 09:12, "José Luis Cetina" >> >> >> >> <maxtorz...@gmail.com> escribió: >> >> >> >> > >> >> >> >> >> I'm not sure if the include tag accept more than 1 class. >> >> >> >> >> >> >> >> >> >> You have: >> >> >> >> >> >> >> <includes>**/entities/*.class,java.util.ArrayList.class</includ >> >> >> >> >> es> >> >> >> >> >> >> >> >> >> >> Try to remove java.util.ArrayList. >> >> >> >> >> El 19/11/2012 09:05, "Chris Wolf" >> >> <cwolf.a...@gmail.com> escribió: >> >> >> >> >> >> >> >> >> >>> José, >> >> >> >> >>> >> >> >> >> >>> Thanks - I sent the two entities to John (this list). >> >> >> >> The pom.xml >> >> >> >> >>> is attached... >> >> >> >> >>> >> >> >> >> >>> -Chris >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> On Mon, Nov 19, 2012 at 9:54 AM, José Luis Cetina >> >> >> >> >>> <maxtorz...@gmail.com> >> >> >> >> >>> wrote: >> >> >> >> >>> > Please send your 2 entities and your pom >> >> configuration whit >> >> >> >> >>> > the enhance plugin. >> >> >> >> >>> > El 19/11/2012 08:46, "Chris Wolf" >> >> >> >> <cwolf.a...@gmail.com> escribió: >> >> >> >> >>> > >> >> >> >> >>> >> José, >> >> >> >> >>> >> >> >> >> >> >>> >> I tried List/ArrayList - same error. Thanks.... >> >> >> >> >>> >> >> >> >> >> >>> >> -Chris >> >> >> >> >>> >> >> >> >> >> >>> >> On Sun, Nov 18, 2012 at 9:47 PM, José Luis Cetina < >> >> >> >> >>> maxtorz...@gmail.com> >> >> >> >> >>> >> wrote: >> >> >> >> >>> >> > Of course I'm using 1-M relationships but I use them >> >> >> >> with List >> >> >> >> >>> >> > not >> >> >> >> >>> >> hashset, >> >> >> >> >>> >> > why you dont give a try to list only for look if the >> >> >> >> problem is >> >> >> >> >>> >> > with hashset. >> >> >> >> >>> >> > El 18/11/2012 19:59, "Chris Wolf" >> >> >> >> <cwolf.a...@gmail.com> escribió: >> >> >> >> >>> >> > >> >> >> >> >>> >> >> José, >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> Thanks for your reply. My pom.xml setup is >> >> very similar >> >> >> >> >>> >> >> to yours >> >> >> >> >>> and >> >> >> >> >>> >> >> the "enhance" goal runs without error, but, as I >> >> >> >> >>> >> >> mentioned, I still get the error on "casting >> >> >> >> java.util.HashSet". Are you able >> >> >> >> >>> >> >> to persist entities with 1-M or M-M relationships? >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> BTW, I changed my code to temporarily change JPA >> >> >> >> provider from >> >> >> >> >>> OpenJPA >> >> >> >> >>> >> >> to the Hibernate JPA provider and, once again, >> >> >> >> >>> >> >> Hibernate's JPA reports: >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> Exception in thread "main" >> >> >> >> java.lang.IllegalArgumentException: >> >> >> >> >>> Unknown >> >> >> >> >>> >> >> entity: java.util.HashSet >> >> >> >> >>> >> >> at >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >> org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntity >> >> >> >> Ma >> >> >> >> >>> nagerImpl.java:671) >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> Well, at least both JPA implementations are >> >> >> >> complaining about >> >> >> >> >>> >> >> the >> >> >> >> >>> same >> >> >> >> >>> >> >> issue - I just wish I knew >> >> >> >> >>> >> >> what I was doing! I know I can get this to work >> >> >> >> in an instant by >> >> >> >> >>> >> >> reverting to Hibernate-only solution, but I >> >> was hoping >> >> >> >> >>> >> >> the byte-code weaving of >> >> >> >> JPA would >> >> >> >> >>> >> >> be a performance advantage over Hibernate's >> >> >> >> reflection/proxy >> >> >> >> >>> >> >> pattern. >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> Thanks again, >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> -Chris >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> On Sun, Nov 18, 2012 at 1:26 PM, José Luis Cetina < >> >> >> >> >>> maxtorz...@gmail.com >> >> >> >> >>> >> > >> >> >> >> >>> >> >> wrote: >> >> >> >> >>> >> >> > I have this in my pom.xml for ENHANCMENT >> and works: >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > <!--OPENJPA ENHANCMENT--> >> >> >> >> >>> >> >> > <plugin> >> >> >> >> >>> >> >> > >> >> <groupId>org.apache.openjpa</groupId> >> >> >> >> >>> >> >> > >> >> >> >> <artifactId>openjpa-maven-plugin</artifactId> >> >> >> >> >>> >> >> > <version>2.2.0</version> >> >> >> >> >>> >> >> > <configuration> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > <includes>mypackage/model/*.class</includes> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> <addDefaultConstructor>true</addDefaultConstructor> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > >> >> >> >> <enforcePropertyRestrictions>true</enforcePropertyRestrictio >> >> >> >> >>> >> >> > ns> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > >> >> >> >> >> >> <connectionDriverName>com.mysql.jdbc.Driver</connectionDriverName> >> >> >> >> >>> >> >> > <connectionProperties> >> >> >> >> >>> >> >> > >> >> >> >> driverClass=${database.driver.name}, >> >> >> >> >>> >> >> > >> >> >> >> jdbcUrl=${database.connection.url}, >> >> >> >> >>> >> >> > user=${database.user}, >> >> >> >> >>> >> >> > >> >> password=${database.password}, >> >> >> >> >>> >> >> > minPoolSize=5, >> >> >> >> >>> >> >> > acquireRetryAttempts=3, >> >> >> >> >>> >> >> > maxPoolSize=20 >> >> >> >> >>> >> >> > </connectionProperties> >> >> >> >> >>> >> >> > </configuration> >> >> >> >> >>> >> >> > <executions> >> >> >> >> >>> >> >> > <execution> >> >> >> >> >>> >> >> > <id>enhancer</id> >> >> >> >> >>> >> >> > >> >> <phase>process-classes</phase> >> >> >> >> >>> >> >> > <goals> >> >> >> >> >>> >> >> > <goal>enhance</goal> >> >> >> >> >>> >> >> > </goals> >> >> >> >> >>> >> >> > </execution> >> >> >> >> >>> >> >> > </executions> >> >> >> >> >>> >> >> > <dependencies> >> >> >> >> >>> >> >> > <dependency> >> >> >> >> >>> >> >> > >> >> >> >> <groupId>org.apache.openjpa</groupId> >> >> >> >> >>> >> >> > >> >> <artifactId>openjpa</artifactId> >> >> >> >> >>> >> >> > <version>2.2.0</version> >> >> >> >> >>> >> >> > </dependency> >> >> >> >> >>> >> >> > </dependencies> >> >> >> >> >>> >> >> > </plugin> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > In my persistence.xml i have: >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > <property name="openjpa.ConnectionUserName" >> >> >> >> >>> >> value="${db.username}"/> >> >> >> >> >>> >> >> > <property name="openjpa.ConnectionPassword" >> >> >> >> >>> >> >> value="${db.password}"/> >> >> >> >> >>> >> >> > <property name="openjpa.ConnectionURL" >> >> >> >> value="${db.url}"/> >> >> >> >> >>> >> >> > <property >> name="openjpa.ConnectionDriverName" >> >> >> >> >>> >> >> > value="${db.driver.class}"/> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > You can replace the database properties in >> >> >> >> persistence.xml >> >> >> >> >>> >> >> > with >> >> >> >> >>> your >> >> >> >> >>> >> own >> >> >> >> >>> >> >> > values >> >> >> >> >>> >> >> (${db.username},${db.password},${db.url},${db.driver.class}). >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > I use this configuration for my JEE Projects. >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > Maybe this can help you. >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > Regards. >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > SCJA. JL Cetina >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > 2012/11/18 Chris Wolf <cwolf.a...@gmail.com> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> >> I wrote a shell script to directly invoke >> >> PCEnhancer >> >> >> >> >>> >> >> >> on class java.util.HashSet, and even that >> >> didn't work: >> >> >> >> >>> >> >> >> >> >> >> >> >>> >> >> >> $ ./enhance.sh >> >> >> >> >>> >> >> >> 52 openjpa INFO [main] openjpa.Tool - >> >> >> >> Enhancer running on >> >> >> >> >>> type >> >> >> >> >>> >> >> >> "java.util.HashSet". >> >> >> >> >>> >> >> >> Exception in thread "main" >> >> java.lang.RuntimeException: >> >> >> >> >>> >> >> >> java.io.FileNotFoundExcep >> >> >> >> >>> >> >> >> tion: >> >> >> >> >>> >> >> >> >> >> file:\C:\opt\jdk\jre\lib\rt.jar!\java\util\HashSet.cl >> >> >> >> >>> >> >> >> ass >> >> >> >> >>> (The >> >> >> >> >>> >> >> >> filename, directory name, or volume label syntax >> >> >> >> is incorrect) >> >> >> >> >>> >> >> >> at >> >> >> >> >>> >> >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >> org.apache.openjpa.lib.conf.Configurations.launchRunnable(Configur >> >> >> >> at >> >> >> >> >>> ions.java:744) >> >> >> >> >>> >> >> >> >> >> >> >> >>> >> >> >> On Sun, Nov 18, 2012 at 10:37 AM, Chris Wolf < >> >> >> >> >>> cwolf.a...@gmail.com> >> >> >> >> >>> >> >> wrote: >> >> >> >> >>> >> >> >> > Hello, >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > This is my first posting and first >> >> attempt to use >> >> >> >> >>> >> >> >> > OpenJPA. I >> >> >> >> >>> put >> >> >> >> >>> >> >> >> > together a quick demo and can persist >> >> individual, >> >> >> >> >>> >> >> >> > unrelated entities. However, when I try >> >> to persist >> >> >> >> >>> >> >> >> > related entities to two tables via a >> >> link table, i.e. >> >> >> >> >>> many-2-many, >> >> >> >> >>> >> >> >> > it keeps complaining about "casting to >> >> >> >> >>> >> >> >> > PersistenceCapable", in particular the class >> >> >> >> "java.util.HashSet". >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > First, I am using the Eclipse JPA plugin >> >> >> >> (called "Dali" >> >> >> >> >>> >> >> >> > or "EclipseLink"). Of course, I have OpenJPA >> >> >> >> configured >> >> >> >> >>> >> >> >> > as my JPA provider, I am in a plain Java SE >> >> >> >> environment >> >> >> >> >>> >> >> >> > with LOCAL_RESOURCE via JDBC connection >> >> >> >> properties in the >> >> >> >> >>> >> >> >> > persistence.xml. I am using Sun/Oracle 64bit >> >> >> >> >>> >> >> >> > JDK-1.6 and OpenJPA-2.2.0. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > I am using the Eclipse JPA plugin to generate >> >> >> >> the entity >> >> >> >> >>> classes >> >> >> >> >>> >> from >> >> >> >> >>> >> >> >> > already-exiting database schema objects, >> >> and that >> >> >> >> >>> >> >> >> > code looks like (just pasting the >> relationship >> >> >> >> >>> >> >> >> > code), >> >> >> >> >>> this >> >> >> >> >>> >> >> >> > action also adds these classes to >> >> persistence.xml >> >> >> >> >>> >> >> >> > via persistence-unit/class elements. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > First M2M entity, "MarketData": >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > //bi-directional many-to-many >> >> >> >> association to RiskFactor >> >> >> >> >>> >> >> >> > @ManyToMany(mappedBy="marketData") >> >> >> >> >>> >> >> >> > public Set<RiskFactor> >> getRiskFactors() { >> >> >> >> >>> >> >> >> > return this.riskFactors; >> >> >> >> >>> >> >> >> > } >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Second M2M entity "RiskFactor": >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > //bi-directional many-to-many >> >> >> >> association to MarketData >> >> >> >> >>> >> >> >> > @ManyToMany >> >> >> >> >>> >> >> >> > @JoinTable( >> >> >> >> >>> >> >> >> > >> name="MARKET_DATA__RISK_FACTOR" >> >> >> >> >>> >> >> >> > , joinColumns={ >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > @JoinColumn(name="RISK_FACTOR_ID", >> >> >> >> >>> >> >> >> nullable=false) >> >> >> >> >>> >> >> >> > } >> >> >> >> >>> >> >> >> > , inverseJoinColumns={ >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > @JoinColumn(name="MARKET_DATA_ID", >> >> >> >> >>> >> >> >> nullable=false) >> >> >> >> >>> >> >> >> > } >> >> >> >> >>> >> >> >> > ) >> >> >> >> >>> >> >> >> > public Set<MarketData> >> getMarketData() { >> >> >> >> >>> >> >> >> > return this.marketData; >> >> >> >> >>> >> >> >> > } >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > When I run the code, the log >> indicates implicit >> >> >> >> >>> >> >> >> > runtime >> >> >> >> >>> enhacement, >> >> >> >> >>> >> >> >> > yet it is complaining: >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > >> "[persistdemo.ojpa.entities.RiskFactor@61578aab] >> >> >> >> >>> >> [java.util.HashSet]" >> >> >> >> >>> >> >> >> > to PersistenceCapable failed. Ensure >> >> that it has >> >> >> >> >>> >> >> >> > been >> >> >> >> >>> enhanced." >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > ...when it says, "Ensure that it has been >> >> >> >> >>> >> >> >> > enhanced." - which is >> >> >> >> >>> >> "it" >> >> >> >> >>> >> >> >> > referring to? The entity "RiskFactor" >> >> or the field >> >> >> >> >>> relationship >> >> >> >> >>> >> >> >> > field's class, "java.util.HashSet"? >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > 186 openjpa INFO [main] >> >> openjpa.Runtime - OpenJPA >> >> >> >> >>> dynamically >> >> >> >> >>> >> >> >> > loaded the class enhancer. Any >> classes that were >> >> >> >> >>> >> >> >> > not enhanced >> >> >> >> >>> at >> >> >> >> >>> >> build >> >> >> >> >>> >> >> >> > time will be enhanced when they are >> >> loaded by the JVM. >> >> >> >> >>> >> >> >> > SLF4J: Failed to load class >> >> >> >> >>> "org.slf4j.impl.StaticLoggerBinder". >> >> >> >> >>> >> >> >> > SLF4J: Defaulting to no-operation >> (NOP) logger >> >> >> >> >>> >> >> >> > implementation >> >> >> >> >>> >> >> >> > SLF4J: See >> >> >> >> >>> >> >> >> > >> >> http://www.slf4j.org/codes.html#StaticLoggerBinderf >> >> >> >> >>> >> >> >> > or >> >> >> >> >>> >> >> >> > further details. >> >> >> >> >>> >> >> >> > 243 openjpa INFO [main] >> >> openjpa.Runtime - OpenJPA >> >> >> >> >>> dynamically >> >> >> >> >>> >> >> >> > loaded a validation provider. >> >> >> >> >>> >> >> >> > 596 openjpa INFO [main] openjpa.Runtime - >> >> >> >> Starting OpenJPA >> >> >> >> >>> >> 2.2.0 >> >> >> >> >>> >> >> >> > 630 openjpa INFO [main] >> >> openjpa.jdbc.JDBC - Using >> >> >> >> >>> dictionary >> >> >> >> >>> >> class >> >> >> >> >>> >> >> >> > >> "org.apache.openjpa.jdbc.sql.OracleDictionary". >> >> >> >> >>> >> >> >> > Exception in thread "main" >> >> >> >> <openjpa-2.2.0-r422266:1244990 >> >> >> >> >>> nonfatal >> >> >> >> >>> >> >> >> > user error> >> >> >> >> org.apache.openjpa.persistence.ArgumentException: >> >> >> >> >>> >> Attempt >> >> >> >> >>> >> >> >> > to cast instance >> >> >> >> >>> "[persistdemo.ojpa.entities.RiskFactor@61578aab] >> >> >> >> >>> >> >> >> > [java.util.HashSet]" to >> >> PersistenceCapable failed. >> >> >> >> >>> >> >> >> > Ensure >> >> >> >> >>> that it >> >> >> >> >>> >> has >> >> >> >> >>> >> >> >> > been enhanced. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Maybe because "java.util.HashSet" was loaded >> >> >> >> before the >> >> >> >> >>> >> >> >> > dynamic enhancer could get to it? >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Next, I tried performing build-time >> >> enhancement via >> >> >> >> >>> >> >> >> > Maven, per >> >> >> >> >>> this >> >> >> >> >>> >> >> doc: >> >> >> >> >>> >> >> >> > >> >> http://openjpa.apache.org/enhancement-with-maven.ht >> >> >> >> >>> >> >> >> > ml >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > When I ran "mvn openjpa:enhance", it >> >> finished with >> >> >> >> >>> >> >> >> > success, but >> >> >> >> >>> >> none >> >> >> >> >>> >> >> >> > of the classes in target/classes seemed >> >> to have be >> >> >> >> >>> >> >> >> > changed (last-modified date same as >> >> >> >> compile-time). and >> >> >> >> >>> >> >> >> > re-running >> >> >> >> >>> results >> >> >> >> >>> >> in >> >> >> >> >>> >> >> >> > the same error and stack-trace. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > My openjpa:enhance configuration was: >> >> >> >> >>> >> >> >> > <configuration> >> >> >> >> >>> >> >> >> > >> >> >> >> <includes>**/entities/*.class,java.util.HashSet</includes> >> >> >> >> >>> >> >> >> > >> >> >> >> <addDefaultConstructor>true</addDefaultConstructor> >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> >> >> >> <enforcePropertyRestrictions>true</enforcePropertyRestrictions> >> >> >> >> >>> >> >> >> > </configuration> >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Next, I tried invoking with: >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > >> >> >> >> -javaagent:/opt/apache-openjpa-2.2.0/openjpa-all-2.2.0.ja >> >> >> >> >>> >> >> >> > r >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Same error - same stack trace. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Then, I tried setting this property: >> >> >> >> >>> >> >> >> > openjpa.RuntimeUnenhancedClasses=supported >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Same error - same stack trace. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Then, following a suggestion I found here: >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >> http://openjpa.208410.n2.nabble.com/JPA-adding-entities-to-EntityM >> >> >> >> an >> >> >> >> >>> agerFactory-programmatically-td210697.html >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > I tried setting both: >> >> >> >> >>> >> >> >> > openjpa.RuntimeUnenhancedClasses=supported >> >> >> >> >>> >> >> >> > >> >> openjpa.MetaDataFactory=jpa(Types=java.util.HashSet >> >> >> >> >>> >> >> >> > ) >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > BTW, this is a dead link "User's Guide on >> >> >> >> >>> >> >> >> > Enhancement" / >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >> http://openjpa.apache.org/builds/latest/docs/manual/manual.html#re >> >> >> >> f_ >> >> >> >> >>> guide_pc_enhance >> >> >> >> >>> >> >> >> > (from page: >> >> >> >> >>> >> >> >> > >> >> http://openjpa.apache.org/entity-enhancement.html) >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > So is there any way to use OpenJPA to persist >> >> >> >> >>> >> >> >> > objects related >> >> >> >> >>> via a >> >> >> >> >>> >> >> >> > link table? (there obviously must be, but >> >> >> >> it's a total >> >> >> >> >>> >> >> >> > mystery to me) I can't believe it's this >> >> >> >> >>> >> difficult, >> >> >> >> >>> >> >> >> > I must be doing something really dumb. >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > Regards, >> >> >> >> >>> >> >> >> > >> >> >> >> >>> >> >> >> > CW >> >> >> >> >>> >> >> >> >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> > -- >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> >> >> >> >> ------------------------------------------------------------------ >> >> >> >> - >> >> >> >> >>> >> >> > *SCJA. José Luis Cetina* >> >> >> >> >>> >> >> > >> >> >> >> >>> >> >> >> >> >> >> ------------------------------------------------------------------ >> >> >> >> - >> >> >> >> >>> >> >> >> >> >> >> >>> >> >> >> >> >> >>> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >>