[ 
https://issues.apache.org/jira/browse/OPENJPA-1387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12778287#action_12778287
 ] 

Martin Dirichs commented on OPENJPA-1387:
-----------------------------------------

Just noticed that there exists an exceptional database not capable of unique 
contraints on nullable fields: Apache Derby, versions up to 10.4.1.3. In 
10.4.1.3, this shortcoming was fixed, see here:
http://issues.apache.org/jira/browse/DERBY-3330
OpenJPA currently uses Derby 10.2.2.0 for its test cases. Thus, there are build 
failures after applying this patch. There are three possibilities of how to 
deal with this:
1. Eliminate the problem by updating to a more recent Derby version.
2. Modify the test cases so that @Column(nullable=false) is explicitly stated 
where necessary.
3. Continue to label columns implicitly as non-nullable as database-specific 
logic. Do it for Derby < 10.4.1.3 and maybe some other database out there I am 
not aware of, leave it for all others (default).

> Unique colums automatically defined as non-nullable
> ---------------------------------------------------
>
>                 Key: OPENJPA-1387
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1387
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 2.0.0-M3
>         Environment: Error happens in every environment.
>            Reporter: Martin Dirichs
>            Assignee: Pinaki Poddar
>             Fix For: 2.0.0-M4
>
>         Attachments: OpenJPA-Trunk_OJ1387.patch
>
>
> Any unique constraint declared with OpenJPA implicitly sets the respective 
> columns to be non-null. This is a problem if OpenJPA's mapping tool is used 
> to create the database schema. Even if something like @Column(nullable=true) 
> is explicitly stated, the columns will always be created by OpenJPA as not 
> null.
> Modifying the database schema manually to make the columns nullable is a 
> possible workaround. It does not seem to cause any problems with either 
> OpenJPA or the databases.
> I would suggest to drop the marking of unique columns as not nullable. This 
> is done by removing the corresponding code lines in 
> org.apache.openjpa.jdbc.schema.Unique (trivial patch appended to this issue). 
> If someone wants a unique column to be not nullable, this can be specified 
> explicitly with @Column(nullable=false) as usual.
> I can only speculate about the reason this strange coupling of unique and 
> nullable had been introduced into OpenJPA. To my knowledge, it is perfectly 
> legal use to have unique contraints on nullable columns. In effect this means 
> that there may be multiple rows with null values, whilst all rows with 
> non-null values have to be unique. ANSI SQL-92 also explicitly mentions 
> nullable unique columns and states that this is a crucial difference between 
> PRIMARY KEY columns and UNIQUE columns: the former are always not nullable, 
> the latter may be nullable.
> This issue also pops up again and again in the user discussions, without (to 
> my knowledge) a single authorative answer to why this behaviour is as it is 
> in OpenJPA. Two examples:
> My question, which remained unanswered:
> http://n2.nabble.com/Unique-colums-automatically-made-NOT-NULL-td2827809.html
> Another users question, about a month later:
> http://n2.nabble.com/Nullable-unique-constraints-td3161182.html

-- 
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