[ 
https://issues.apache.org/jira/browse/OPENJPA-1489?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Milosz Tylenda resolved OPENJPA-1489.
-------------------------------------

       Resolution: Duplicate
    Fix Version/s: 2.0.0-beta
                   1.3.0
         Assignee: Milosz Tylenda

> Generated UNIQUE constraint names and HSQL 
> -------------------------------------------
>
>                 Key: OPENJPA-1489
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1489
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: sql
>    Affects Versions: 1.2.2
>         Environment: OpenJPA 1.2.2
> HSQL 1.8.0.10 and HSQL 1.8.1.1 and 2.0.0-rc8
> Mac OS X 10.6.2
> Java 1.6.0_17 Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed 
> mode)
>            Reporter: Hannes Schmidt
>            Assignee: Milosz Tylenda
>            Priority: Minor
>             Fix For: 1.3.0, 2.0.0-beta
>
>
> In my unit tests, I'm using the openjpa.jdbc.SynchronizeMappings feature to 
> have OpenJPA create the schema in an HSQL in-memory database. Two of the 
> tables in my schema each have a unique constraint that lists the same column 
> names (foo,bar) in the same order. The generated name for both constraints is 
> UNQ_foobar. HSQL apparently puts the names of unique constraints into a 
> schema-wide namespace which causes the CREATE TABLE statement for the second 
> table to fail with "constraint already exist".
> @Entity
> @Table( uniqueConstraints = { @UniqueConstraint( columnNames = { "foo", "bar" 
> } ) } )
> public class X {
> ...
> private String foo;
> private long bar;
> ...
> }
> @Entity
> @Table( uniqueConstraints = { @UniqueConstraint( columnNames = { "foo", "bar" 
> } ) } )
> public class Y {
> ...
> private String foo;
> private long bar;
> ...
> }
> 912  test  TRACE  [main] openjpa.jdbc.SQL - <t 7224872, conn 1720095856> 
> executing stmnt 1211647530 CREATE TABLE X ( ... , foo VARCHAR(22) NOT NULL, 
> ... , bar BIGINT NOT NULL, PRIMARY KEY (id), CONSTRAINT UNQ_foobar UNIQUE 
> (foo, bar))
> 915  test  TRACE  [main] openjpa.jdbc.SQL - <t 7224872, conn 1720095856> [3 
> ms] spent
> 915  test  TRACE  [main] openjpa.jdbc.SQL - <t 7224872, conn 579409826> 
> executing stmnt 853942561 CREATE TABLE Y ( ... , foo VARCHAR(22) NOT NULL, 
> ... , bar BIGINT NOT NULL, PRIMARY KEY (id), CONSTRAINT UNQ_foobar UNIQUE 
> (foo, bar))
> 920  test  TRACE  [main] openjpa.jdbc.SQL - <t 7224872, conn 579409826> [5 
> ms] spent
> Jan 30, 2010 11:46:16 AM org.springframework.test.context.TestContextManager 
> beforeTestMethod
> WARNING: Caught exception while allowing TestExecutionListener 
> [org.springframework.test.context.transaction.transactionaltestexecutionliste...@2773a64a]
>  to process 'before' execution of test method [public void 
> com.eyealike.ps.core.test.CollectionDaoTest.setup()] for test instance 
> [com.eyealike.ps.core.test.collectiondaot...@19aa5882]
> org.springframework.transaction.CannotCreateTransactionException: Could not 
> open JPA EntityManager for transaction; nested exception is 
> <openjpa-1.2.2-r422266:898935 nonfatal general error> 
> org.apache.openjpa.persistence.PersistenceException: Constraint already 
> exists: UNQ_OWNERIDKEY in statement [CREATE TABLE Y ... } [code=-60, 
> state=S0011]
> Note that I tweaked my sample code and log trace a little to simplify the 
> test case.
> I didn't try to reproduce this with OpenJPA 2.0.0 yet. From looking at the 
> code in the 2.0.0 trunk, I can tell that this part has been rewritten 
> completely and this issue might not apply to 2.0.0. I also don't know whether 
> HSQL is violating the SQL standard by requiring unique constaint names to be 
> schema-unique, not just table-unique.
> What works for me as a workaround is to reorder the columns in the constraint 
> on the second table.
> Assuming this is not a bug in HSQL and assuming it also reproduces in 2.0.0 
> beta, I'd naively prefix constraint names with the table name but I'm no 
> specialist in either SQL or JPA ...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to