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