Hi,
HSQLDB does not seem to allow identical unique constraint names in
different tables. On the contrary, MySQL allows. For example, MySQL will
create following unique constraints on table A and B with the same name
UNQ_uniqueValue as per the reported use case when both A.java and B.java are
annotated as
@Table([EMAIL PROTECTED](columnNames={"uniqueValue"})})
CREATE TABLE A (id BIGINT NOT NULL, uniqueValue INTEGER NOT NULL, PRIMARY
KEY (id), UNIQUE UNQ_uniqueValue (uniqueValue))
and
CREATE TABLE B (id BIGINT NOT NULL, uniqueValue INTEGER NOT NULL, PRIMARY
KEY (id), UNIQUE UNQ_uniqueValue (uniqueValue))
The use case when ran against HSQLDB the schema generation DDL were:
CREATE TABLE A (id BIGINT NOT NULL, uniqueValue INTEGER NOT NULL, PRIMARY
KEY (id), CONSTRAINT UNQ_uniqueValue UNIQUE (uniqueValue))
and
CREATE TABLE B (id BIGINT NOT NULL, uniqueValue INTEGER NOT NULL, PRIMARY
KEY (id), CONSTRAINT UNQ_uniqueValue UNIQUE (uniqueValue))
which failed because "Constraint already exists: UNQ_UNIQUEVALUE in
statement [CREATE TABLE B ..."
However, the unique constraint name was indeed created from the column name
'uniqueValue' which is different from what you have reported as
"...CONSTRAINT UNQ_externalRef UNIQUE (uniqueValue)...".
Not sure where and how the name "UNQ_externalRef" is being generated. But if
the actual column name is used for creating the name of the constraint then
a workaround will be to map A.uniqueValue and B.uniqueValue to differently
named columns in the database.
Claudio Romano-2 wrote:
>
> Hi all,
>
> I'm using openjpa version 1.2.0 with HSQLDB and I have a verty nasty
> problem using schema generator with unique constraints.
>
> I have to classes to persist:
>
> public class UniqueA {
> ...
>
> private int uniqueValue;
>
> }
>
> public class UniqueB {
> ...
>
> private int uniqueValue;
> }
>
>
> The property uniqueValue should be unique for both classes.
> The first thing I used was the @Column annotation:
> @Column(name="uniqueValue", unique = true)
>
> The schema generator generates follow sql statement
> ...CONSTRAINT UNQ_ UNIQUE (uniqueValue)..
>
> as soon openjpa generates the second constraint, it will fail because
> the constraint name is not unique.
>
>
>
> The second try was with the @Table annotation:
> "@Table( uniqueConstraints= [EMAIL PROTECTED](columnNames=
> {"uniqueValue"})})"
>
> The schema generator generates following sql statement:
> ...CONSTRAINT UNQ_externalRef UNIQUE (uniqueValue)...
>
> same as before, as soon openjpa generates the second constraint, it will
> fail because the constraint name is not unique.
>
>
> This is my openjpa.jdbc.SynchronizeMappings:
> openjpa.jdbc.SynchronizeMappings=buildSchema(ForeignKeys=true,
> Indexes=true)
>
>
> So i finally have no solution the let openjpa generate the correct
> schema. What do I do wrong?
>
> Thank!
> Claudio
>
>
--
View this message in context:
http://n2.nabble.com/Schema-generation-with-unique-constraints-tp1469373p1470609.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.