Hi, please note that my example/junit test works fine as long as I don't change the Mapping Factory properties. Only when changing the MappingFactory it goes wrong.
My Group Entity looks like this: @Embeddable public class GroupPK { /*Group Number*/ @Column(name = "NU_GRP", length=2) private Short groupNumber; /*Group name*/ @Column(name = "NA_GRP", length=20) private String groupName; /*Valid from*/ @Temporal(TemporalType.DATE) @Column(name = "DA_VAL_FRM", length=4) private Date validFromDate; ... @Entity @Table(name="MPTZZY") public class Group extends UpdateEntity{ /*Remark text*/ @Column(name = "TE_RMK", length=20) private String remarkText; @OneToMany(mappedBy="group",fetch=FetchType.EAGER ,cascade=CascadeType.ALL) Collection<Person> persons=new ArrayList<Person>(); @EmbeddedId private GroupPK id = new GroupPK(); ... Best regards Marcel From: Michael Dick <michael.d.d...@gmail.com> To: users@openjpa.apache.org Date: 11.08.2011 16:36 Subject: Re: Problems when using "openjpa.MetaDataFactory" Property Going back to your original email, the documentation is misleading. While you could use PersistenceMetaDataFactory you'd probably prefer to use PersistenceMappingFactory. Basically, you did the right thing by extending the PersistenceMappingFactory.. The product derivations are confusing, because they set the same alias. But they should always be applied in a consistent order. There's some tricky ordering in the code, but basically the PersistenceProductDerivation should always be called before JDBCPersistenceProductDerivation. If all you want to do is override the MetaDataFactory you do not need to write your own product derivation. ProductDerivations are needed if you want to support a different type of data store (maybe a non-relational database), or a different spec (JDO). I don't see a reason why you'd need to go that far. All that said, I think we're going to need to know more about your model to figure out what is going wrong here. In particular what annotations are on the NA_GRP column. Once we get this to work with the OpenJPA defaults, we can look at what goes wrong with your MappingFactory. HTH -mike On Thu, Aug 11, 2011 at 2:32 AM, Marcel Urbanek <dt0...@retail-sc.com>wrote: > Hi Rick, > > when I use > > <property name="openjpa.MetaDataFactory" value=" > > "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory(types=com.retail_sc.test.entity.Group;com.retail_sc.test.entity.Person;)" > /> > > The same error ("no registered metadata") occurs. > > After some investigation (looking at JDBCPersistenceProductDerivation) I > found out that following configuration: > > <property name="openjpa.MetaDataFactory" value= > "org.apache.openjpa.persistence.PersistenceMetaDataFactory"/> > <property name="openjpa.jdbc.MappingFactory" value= > "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory"/> > <property name="openjpa.jdbc.MappingDefaults" value= > "org.apache.openjpa.persistence.jdbc.PersistenceMappingDefaults"/> > > Leads to following Exception: > > org.apache.openjpa.persistence.ArgumentException: You cannot join > on column "MPTZZY.NA_GRP". It is not managed by a mapping that supports > joins. > > which looks a little better to me? > > Actually I think the main problem is, that PersistenceProductDerivation > and JDBCPersistenceProductDerivation both are setting the "JPA" Alias. > > But one sets MetaDataFactory for Alias JPA whith > PersistenceMetaDataFactory and one sets MetaDataFactory for Alias JPA with > PersistenceMappingFactory. During execution both, > PersistenceProductDerivation and JDBCPersistenceProductDerivation are > invoked which results in MetaDataFactory being set to the one or the other > value, depending on which Derivation was called lately. This is nothing > one could easily configure in the persistence.xml. > > Instead I would have to implement an own Derivation? I am a little > confused. > > Best regards Marcel > > > > > From: Rick Curtis <curti...@gmail.com> > To: users@openjpa.apache.org > Date: 10.08.2011 18:31 > Subject: Re: Problems when using "openjpa.MetaDataFactory" Property > > > > Try specifying your types also --> <property > name="openjpa.MetaDataFactory" > > value="org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory(types=com.retail_sc.test.entity.Group;com.retail_sc.test.entity.Group2;...etc/> > > This happens at runtime, but I can't find where it happens atm. > > On Wed, Aug 10, 2011 at 11:12 AM, Marcel Urbanek > <dt0...@retail-sc.com>wrote: > > > Then following Stacktrace is displayed: > > > > Caused by: <openjpa-1.2.1-r752877:753278 fatal user error> > > org.apache.openjpa.persistence.ArgumentException: Errors encountered > while > > resolving metadata. See nested exceptions for details. > > at > > > > > > org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:563) > > at > > > > > > org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308) > > ... > > Caused by: java.lang.IllegalStateException: No registered metadata for > > type "class com.retail_sc.test.entity.Group". > > at > > org.apache.openjpa.enhance.PCRegistry.getMeta(PCRegistry.java:255) > > at > > org.apache.openjpa.enhance.PCRegistry.newInstance(PCRegistry.java:111) > > ... > > > > Best regards Marcel > > > > > > > > From: Rick Curtis <curti...@gmail.com> > > To: users@openjpa.apache.org > > Date: 10.08.2011 18:04 > > Subject: Re: Problems when using "openjpa.MetaDataFactory" > Property > > > > > > > > See if setting this property works for you. --> <property > > name="openjpa.MetaDataFactory" > > value="org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory/> > > > > Thanks, > > Rick > > > > > > On Wed, Aug 10, 2011 at 10:48 AM, Marcel Urbanek > > <dt0...@retail-sc.com>wrote: > > > > > Sure. > > > > > > My Entity looks like the following: > > > > > > @Entity > > > @Table(name="MPTZZY") > > > public class Group extends UpdateEntity{ > > > > > > /*Remark text*/ > > > @Column(name = "TE_RMK", > > > length=20) > > > private String remarkText; > > > [...] > > > > > > > > > The according Junit Test is the following (EJB-Services are > implemented > > > straight forward): > > > > > > GroupServiceLocal tempGroupService = (GroupServiceLocal) > > > initialContext.lookup(GroupServiceLocal.class.getCanonicalName()); > > > PersonServiceLocal tempPersonService = (PersonServiceLocal) > > > initialContext.lookup(PersonServiceLocal.class.getCanonicalName()); > > > GroupPK tempPK=new GroupPK(); > > > > > > Person tempPerson=new Person(); > > > tempPerson.getId().setPersonName("Marcel"); > > > tempPerson.setAgeNumber((short) 29); > > > tempPerson.setRemarkText("TEST"); > > > > > > Group tempGroup=new Group(); > > > tempGroup.getId().setGroupName("AA Team"); > > > tempGroup.getId().setGroupNumber((short)1); > > > tempGroup.getId().setValidFromDate(new Date()); > > > tempGroup.setRemarkText("AA Team"); > > > tempGroup.getPersons().add(tempPerson); > > > tempPerson.setGroup(tempGroup); > > > tempGroupService.createGroup(tempGroup); > > > > > > When running the test with the following property in the > > persistence.xml: > > > > > > <property name="openjpa.MetaDataFactory" value="jpa"/> > > > > > > everything works fine. > > > > > > But when I change the property into: > > > > > > <property name="openjpa.MetaDataFactory" value= > > > "org.apache.openjpa.persistence.PersistenceMetaDataFactory"/> > > > > > > (which should be essentially the same, according to the document > > mentioned > > > in the mail before) the test fails with following error message: > > > > > > <openjpa-1.2.1-r752877:753278 nonfatal general error> > > > org.apache.openjpa.persistence.PersistenceException: > > > DB2 SQL error: SQLCODE: -204, SQLSTATE: 42704, SQLERRMC: > > > I01W90.GROUPSQLCA OUTPUT[Errp=DSNXERT2, Errd=-335, 0, 0, -1, 0, 0] > > > DB2 SQL error: SQLCODE: -516, SQLSTATE: 26501, SQLERRMC: null > > > DB2 SQL error: SQLCODE: -518, SQLSTATE: 07003, SQLERRMC: null > > > FailedObject: prepstmnt 18898317 INSERT INTO i01w90.Group > > > (groupName, groupNumber, validFromDate, remarkText, date, time, user) > > > VALUES (?, ?, ?, ?, ?, ?, ?) > > > > > > [org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement] > > > > > > Obviously OpenJPA now does not use the column names I specified (for > > > example "TE_RMK") but instead uses the Java attribute name > > ("remarkText"). > > > > > > Best regards Marcel > > > > > > > > > > > > > > > From: Rick Curtis <curti...@gmail.com> > > > To: users@openjpa.apache.org > > > Date: 10.08.2011 16:12 > > > Subject: Re: Problems when using "openjpa.MetaDataFactory" > > Property > > > > > > > > > > > > Can you post a unit test to help us better understand where you're > > running > > > into problems? > > > > > > Thanks, > > > Rick > > > > > > On Wed, Aug 10, 2011 at 4:49 AM, Marcel Urbanek > > > <dt0...@retail-sc.com>wrote: > > > > > > > Hi, > > > > > > > > I want to overwrite the MetaDataFactory like described here: > > > > > > > > > > > > > > > > > > > > http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/ref_guide_meta.html > > > > > > > > > > > > > > But it turned out it doesn't work. I managed to develop a test > > scenario > > > > which easily produces the behaviour I encountered. > > > > > > > > What _does_ work is the following: > > > > > > > > Adding > > > > <property name="openjpa.MetaDataFactory" value="jpa"/> > > > > to persistence.xml. > > > > > > > > When setting this property my junit test (persisting a simple > > > association, > > > > using @Column Annotation to use differing column names) does work. > > > > > > > > > > > > According to the document above, this property Tag should be > > equivalent > > > to > > > > the setting above: > > > > > > > > <property name="openjpa.MetaDataFactory" > > > > value="org.apache.openjpa.persistence.PersistenceMetaDataFactory"/> > > > > > > > > But when using this configuration my junit test fails. The differing > > > > Column Names set by the @Column.name Attribute are no longer found. > > > > Instead the Java Attribute-Names are used in the SQL. > > > > > > > > My problem is, that I want to implement a custom MetaDataFactory and > > > this > > > > doesn't work either (which is expected, because I extend > > > > PersistenceMetaDataFactory). Is there something I missed? > > > > > > > > (I'm using openjpa 2.11 with openejb 4.0.0 snapshot) > > > > > > > > Best regards Marcel > > > > -- > > > > RSC Commercial Services GmbH & Co. OHG, Wanheimer Strasse 70, > D-40468 > > > > Duesseldorf - Sitz: Duesseldorf - Registergericht: Duesseldorf HRA > > 12655 > > > > Persoenlich haftende Gesellschafter: > > > > C&A Retail GmbH - Sitz: Zug/Schweiz - Handelsregister Kanton Zug: > > > > CH-170.4.010.137-5 > > > > Geschaeftsfuehrer: Bart F. Brenninkmeijer, Martijn N. N. > > Brenninkmeijer, > > > > Tjeerd E. van der Zee, Robert H. A. M. Smeele, Anthony H. Stam, > > > > FRM PARTICIPATIONS S.A. - Sitz: Luxemburg/Luxemburg - Handels- und > > > > Firmenregister Luxemburg: B 58158 > > > > Verwaltungsratsmitglieder: Rafael G. E. Bogaerts, John Drury, Michel > > de > > > > Groote, Johny Seré, Robert H. A. M. Smeele > > > > > > > > > > > > > > > > > -- > > > *Rick Curtis* > > > > > > > > > -- > > > RSC Commercial Services GmbH & Co. OHG, Wanheimer Strasse 70, D-40468 > > > Duesseldorf - Sitz: Duesseldorf - Registergericht: Duesseldorf HRA > 12655 > > > Persoenlich haftende Gesellschafter: > > > C&A Retail GmbH - Sitz: Zug/Schweiz - Handelsregister Kanton Zug: > > > CH-170.4.010.137-5 > > > Geschaeftsfuehrer: Bart F. Brenninkmeijer, Martijn N. N. > Brenninkmeijer, > > > Tjeerd E. van der Zee, Robert H. A. M. Smeele, Anthony H. Stam, > > > FRM PARTICIPATIONS S.A. - Sitz: Luxemburg/Luxemburg - Handels- und > > > Firmenregister Luxemburg: B 58158 > > > Verwaltungsratsmitglieder: Rafael G. E. Bogaerts, John Drury, Michel > de > > > Groote, Johny Seré, Robert H. A. M. Smeele > > > > > > > > > > > > -- > > *Rick Curtis* > > > > > > -- > > RSC Commercial Services GmbH & Co. OHG, Wanheimer Strasse 70, D-40468 > > Duesseldorf - Sitz: Duesseldorf - Registergericht: Duesseldorf HRA 12655 > > Persoenlich haftende Gesellschafter: > > C&A Retail GmbH - Sitz: Zug/Schweiz - Handelsregister Kanton Zug: > > CH-170.4.010.137-5 > > Geschaeftsfuehrer: Bart F. Brenninkmeijer, Martijn N. N. Brenninkmeijer, > > Tjeerd E. van der Zee, Robert H. A. M. Smeele, Anthony H. Stam, > > FRM PARTICIPATIONS S.A. - Sitz: Luxemburg/Luxemburg - Handels- und > > Firmenregister Luxemburg: B 58158 > > Verwaltungsratsmitglieder: Rafael G. E. Bogaerts, John Drury, Michel de > > Groote, Johny Seré, Robert H. A. M. Smeele > > > > > > > -- > *Rick Curtis* > > > -- > RSC Commercial Services GmbH & Co. OHG, Wanheimer Strasse 70, D-40468 > Duesseldorf - Sitz: Duesseldorf - Registergericht: Duesseldorf HRA 12655 > Persoenlich haftende Gesellschafter: > C&A Retail GmbH - Sitz: Zug/Schweiz - Handelsregister Kanton Zug: > CH-170.4.010.137-5 > Geschaeftsfuehrer: Bart F. Brenninkmeijer, Martijn N. N. Brenninkmeijer, > Tjeerd E. van der Zee, Robert H. A. M. Smeele, Anthony H. Stam, > FRM PARTICIPATIONS S.A. - Sitz: Luxemburg/Luxemburg - Handels- und > Firmenregister Luxemburg: B 58158 > Verwaltungsratsmitglieder: Rafael G. E. Bogaerts, John Drury, Michel de > Groote, Johny Seré, Robert H. A. M. Smeele > > -- RSC Commercial Services GmbH & Co. OHG, Wanheimer Strasse 70, D-40468 Duesseldorf - Sitz: Duesseldorf - Registergericht: Duesseldorf HRA 12655 Persoenlich haftende Gesellschafter: C&A Retail GmbH - Sitz: Zug/Schweiz - Handelsregister Kanton Zug: CH-170.4.010.137-5 Geschaeftsfuehrer: Bart F. Brenninkmeijer, Martijn N. N. Brenninkmeijer, Tjeerd E. van der Zee, Robert H. A. M. Smeele, Anthony H. Stam, FRM PARTICIPATIONS S.A. - Sitz: Luxemburg/Luxemburg - Handels- und Firmenregister Luxemburg: B 58158 Verwaltungsratsmitglieder: Rafael G. E. Bogaerts, John Drury, Michel de Groote, Johny Seré, Robert H. A. M. Smeele