openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claudio Romano <claudio.rom...@bitspot.com>
Subject Re: Schema generation with unique constraints
Date Mon, 10 Nov 2008 08:08:56 GMT
Hi,

thx vor the quick response.

"UNQ_externalRef" was a typo, I'm sorry what openpa produces is of
course "UNQ_uniqueValue".

Mapping A.uniqueValue and B.uniqueValue to differently  named columns in
the database could be a workaround.

thanks!
Claudio Romano




Pinaki Poddar wrote:
> 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(uniqueConstraints={@UniqueConstraint(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= {@UniqueConstraint(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
>>
>>
> 

Mime
View raw message