I'm afraid the answer below mean we need to annotate everything explicitly

---------- Forwarded message ----------
From: Kevin Sutter <kwsut...@gmail.com>
Date: Wed, Feb 6, 2013 at 9:33 PM
Subject: Re: No foreign keys created by openJPA
To: Maxim Solodovnik <solomax...@gmail.com>
Cc: us...@openjpa.apache.org


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 <solomax...@gmail.com>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 <kwsut...@gmail.com> 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, seba.wag...@gmail.com <
>> seba.wag...@gmail.com
>> > 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
>> > seba.wag...@gmail.com
>> >
>>
>
>
>
> --
> WBR
> Maxim aka solomax
>




-- 
WBR
Maxim aka solomax

Reply via email to