Hi,

Apache James project uses OpenJPA 2.0.

We've got @OneToMany relations on AbstractJPAMessage [1] to JPAHeader [2] (headers attribute) and JPAProperty [3] (properties attribute). With current config, intermediary tables are created (MESSAGE_HEADER and MESSAGE_PROPERTY) but we would like to get rid of these.

a) We tried to use the @OneToMany 'mappedBy' attribute, adding a JPAMessage attribute on the JPAHeader and JPAProperty. The tables are correctly created if we redefine the annotated headers and properties attributes on the concrete JPAMessage [4] class. We had however to define openjpa.InverseManager=true to make it work at runtime.

b) When we set the @OneToMany with 'mappedBy' attribute on the AbstractJPAMessage (and the JPAMessage on the JPAHeader and JPAProperty), the tables are created, but not the FK. At runtime, the application generates SQL, but no response seems to come back (no exception in the log). It simply hangs.

c) In a) and b) scenario, we need to define an additional JPAMessage concrete attribute on JPAHeader and JPAProperty. This does not allow to define FK to other types, such as the JPAStreamingMessage [5].
In this case, the class structure we built does not make much sense.
Would a Custom Mapping help? (http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_mapping_custom)

d) If we set @ElementJoinColumn(name="MESSAGE_ID", referencedColumnName="ID") on the headers and properties in the AbstractJPAMessage, everything works fine. This also solve problem mentioned in c) because we don't need any JPAMessage attributed on JPAHeader and JPAProperty. However, we try to stick to the standard JPA API without using OpenJPA extensions if not necessary.

e) Apart from the above points, are there any standard way to define indexes other than org.apache.openjpa.persistence.jdbc.Index ?

We would like to hear your comments on the above.
What do you think we should consider/investigate? Are our interpretations correct?

Tks,

Eric

PS: Please reply-to-all so we can follow the thread on James ml.

[1] AbstractJPAMessage http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/AbstractJPAMessage.java?view=log [2] JPAHeader http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAHeader.java?view=log [3] JPAProperty http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAProperty.java?view=log [4] JPAMessage http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMessage.java?view=log [5] JPAStreamingMessage http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/openjpa/JPAStreamingMessage.java?view=log

Reply via email to