@Maxim: Have you already done that locally or should I do that task? Sebastian
2013/2/10 [email protected] <[email protected]> > Yes, > > from my point of view having: > > <property name="openjpa.jdbc.SynchronizeMappings" > value="buildSchema(ForeignKeys=true)"/> > <property name="openjpa.jdbc.SchemaFactory" > value="native(ForeignKeys=true)"/> > > or just: > > <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> > > has simply no effect at all. > Attributes with ManyToOne or OneToMany relations have no FKs created in > the database. Only Indices. > You have to actively annotate every single attribute with @ForeignKey. > There is no other way of telling OpenJPA to create a foreign key. > The docs also say not much about it: > > http://people.apache.org/~mikedd/nightly.builds/apache-openjpa-2.3.0-SNAPSHOT/docs/docbook/manual.html#ref_guide_mapping_synch > > You can enable or disable it. An attribute "(ForeignKeys=true)" seems to > be not known to the Synchronize mappings. > Maybe that would be something like a feature request: > "Automatically created ForeignKeys in runtime forward mapping for > @ManyToOne relations." > > In the meantime we will have to annotate every attribute with @ForeignKey. > > Sebastian > > 2013/2/7 Maxim Solodovnik <[email protected]> > >> I'm afraid the answer below mean we need to annotate everything explicitly >> >> ---------- Forwarded message ---------- >> From: Kevin Sutter <[email protected]> >> Date: Wed, Feb 6, 2013 at 9:33 PM >> Subject: Re: No foreign keys created by openJPA >> To: Maxim Solodovnik <[email protected]> >> Cc: [email protected] >> >> >> Hi guys, >> I didn't see the properties being used in the persistence.xml file that >> you >> posted... >> >> But, in any case, these properties are mainly used for reading foreign key >> information from the database. During the table mapping processing, there >> may be some verification of foreign key constraints as well. This allows >> OpenJPA to make more intelligent decisions when submitting SQL statements >> in batch to avoid constraint collisions. >> >> If you are looking for explicit foreign key specifications, then you'll >> probably have to use the @ForeignKey annotation. >> >> Hope this helps, >> Kevin >> >> >> On Tue, Feb 5, 2013 at 10:00 PM, Maxim Solodovnik <[email protected] >> >wrote: >> >> > Hello Kevin, >> > >> > I just test both properties (added to the persistence.xml) on MySQL 5.5 >> > (InnoDB) >> > and foreign keys were created only for the fields annotated with >> > @ForeignKey :( >> > Is it expected behavior? >> > >> > openJPA version is 2.2.1 >> > >> > foreign keys were checked with following SQL: >> > SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE >> > information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY'; >> > >> > properties were added to the following xml: >> > >> > >> https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml >> > >> > >> > Thanks in advance for your help >> > >> > >> > On Tue, Feb 5, 2013 at 9:58 PM, Kevin Sutter <[email protected]> >> wrote: >> > >> >> Hi Sebastian, >> >> There are two ways to get the ForeignKeys automatically processed. >> >> >> >> <property name="openjpa.jdbc.SynchronizeMappings" >> >> value="buildSchema(ForeignKeys=true)"/> >> >> >> >> Since you were already using a variation of this property, maybe this >> is >> >> the easiest mechanism. A very similar capability is provided by the >> >> Schema >> >> Factory [1]: >> >> >> >> <property name="openjpa.jdbc.SchemaFactory" >> >> value="native(ForeignKeys=true)"/> >> >> >> >> And, of course, there is the manual means of specifying the ForeignKeys >> >> via >> >> the @ForeignKey annotation. >> >> >> >> Hope this helps, >> >> Kevin >> >> >> >> [1] >> >> >> >> >> http://people.apache.org/~mikedd/nightly.builds/apache-openjpa-2.3.0-SNAPSHOT/docs/docbook/manual.html#ref_guide_schema_info_factory >> >> >> >> On Tue, Feb 5, 2013 at 1:07 AM, [email protected] < >> >> [email protected] >> >> > wrote: >> >> >> >> > We are using MySQL with InnoDB and OpenJPA 2.2.1 >> >> > >> >> > We face an issue in the automatic table schema creation: >> >> > Indices are created but no foreign keys. >> >> > >> >> > We are using this configuration file: >> >> > >> >> > >> >> >> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml?view=markup >> >> > >> >> > I guess this is all what configures our schema creation: >> >> > <property name="openjpa.jdbc.SynchronizeMappings" >> value="buildSchema"/> >> >> > >> >> > What I would expect is for example for attributes/mapping like >> (example >> >> 1 >> >> > simple ManyToOne association): >> >> > @ManyToOne(fetch = FetchType.EAGER) >> >> > @JoinColumn(name = "roomtypes_id") >> >> > private RoomType roomtype; >> >> > >> >> > That the attribute roomtypes_id will be created together with a FK >> and >> >> and >> >> > Indice. However Only Indice is created no FK. >> >> > >> >> > The same for any attribute that has a ManyToOne or OneToMany or >> >> ManyToMany >> >> > annotation. >> >> > >> >> > So the question is: >> >> > Is there a config value for SynchronizeMappings that automatically >> >> creates >> >> > not only the Indices but also the FK's for those relations? >> >> > Or do we really need to annotate every attribute with @ForeignKey? >> >> > >> >> > Bonus question :) >> >> > How would that work with a one-sided one-many association without a >> >> cross >> >> > table? >> >> > >> >> > For example (example 2 one-sided one-many association) >> >> > @OneToMany >> >> > @ElementJoinColumn(name = "whiteboarditem_id", >> referencedColumnName >> >> = >> >> > "id") >> >> > private Collection<WhiteboardItem> roomItems; >> >> > >> >> > If I add: >> >> > @ForeignKey(enabled = true) >> >> > to example 1 => ForeignKey is created by SchemaTool >> >> > to example 2 => ForeignKey is _not_ created by SchemaTool >> >> > >> >> > How can I make SchemaTool to create FK in example 2? >> >> > >> >> > >> >> > Thanks! >> >> > Sebastian >> >> > -- >> >> > Sebastian Wagner >> >> > https://twitter.com/#!/dead_lock >> >> > http://www.webbase-design.de >> >> > http://www.wagner-sebastian.com >> >> > [email protected] >> >> > >> >> >> > >> > >> > >> > -- >> > WBR >> > Maxim aka solomax >> > >> >> >> >> >> -- >> WBR >> Maxim aka solomax >> > > > > -- > Sebastian Wagner > https://twitter.com/#!/dead_lock > http://www.webbase-design.de > http://www.wagner-sebastian.com > [email protected] > -- Sebastian Wagner https://twitter.com/#!/dead_lock http://www.webbase-design.de http://www.wagner-sebastian.com [email protected]
