Hi Jean-Baptiste,

I can see two problems in the case you have described:

1. Unique constraints are being named by OpenJPA as "UNQ_" instead of something 
like "UNQ_TABLE_COLUMN".

2. For most databases it is redundant or even incorrect for OpenJPA to create 
unique constraints on primary keys.

What OpenJPA version are you using? Unique constraint handling has been 
reworked in the trunk (future 2.0.0) and 1.3.x branch but there is still room 
for improvement. You are experiencing same or similar behaviour as described in 
OPENJPA-756 and OPENJPA-1047 [1].

Greetings,
Milosz

[1] http://issues.apache.org/jira/browse/OPENJPA-756
http://issues.apache.org/jira/browse/OPENJPA-1047

> I found a workaround or a solution, depending if the behavior is a bug or not.
> 
> This constraint was due to the following declaration in an abstract class all 
> persistant classes inherits from :
>     @Id
>     @GeneratedValue(strategy = GenerationType.IDENTITY)
>     @Column(nullable = false, unique = true)
>     private Long id;
> 
> Is it usefull to declare unique the primary key ? I guess it is at least 
> redundant.
> I removed it and it works fine :
>     @Id
>     @GeneratedValue(strategy = GenerationType.IDENTITY)
>     @Column(nullable = false)
>     private Long id;
> 
> 
> One question is still there for OpenJPA : should the enhance process detect 
> that redundancy ? Should it fails on error for that ?
> 
> If yes, than it is a bug, if no, then it is a workaround :-)
> 
> On Dec 11, 2009, at 18:22 , Jean-Baptiste BRIAUD -- Novlog wrote:
> 
> > Hi the list,
> > 
> > On my DEV machine I'm using MySQL, I use the MappingTool Ant task and its 
> > all OK.
> > I produce the ddl sql file (for human reading) and also directly "inject" 
> > the schema using the MappingTool to the database (not using the generated 
> > sql file).
> > 
> > On PROD, I have to deal with SQLServer. I amended the ant script in order 
> > to connect using a URL specific to SQLServer. I rely on JTDS open source 
> > SQLServer JDBC driver.
> > JDBC connection is fine, but I got an error on the SQL, I have to modify it 
> > by hand to make it work.
> > 
> > I didn't try to specify a "dialect" in the ant script, should I ?
> > If yes, how ?
> > 
> > The error is on the constraint that are all named UNQ_ and it sound like a 
> > problem for SQLServer.
> > CREATE TABLE A (id BIGINT NOT NULL AUTO_INCREMENT<...>, PRIMARY KEY (id), 
> > UNIQUE UNQ_ (id));
> > CREATE TABLE B (id BIGINT NOT NULL AUTO_INCREMENT<...>, PRIMARY KEY (id), 
> > UNIQUE UNQ_ (id));
> > 
> > If I correct the sql by hand like the following, it works :
> > CREATE TABLE A (id BIGINT NOT NULL AUTO_INCREMENT<...>, PRIMARY KEY (id), 
> > UNIQUE UNQ_1 (id));
> > CREATE TABLE B (id BIGINT NOT NULL AUTO_INCREMENT<...>, PRIMARY KEY (id), 
> > UNIQUE UNQ_2 (id));
> > 
> > I can't do it by hand for the real code for a lot of reason, I have to rely 
> > on MappingTool.
> > 
> > Any ideas ?
> 
> 

Reply via email to