You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Vermeulen (JIRA)" <ji...@apache.org> on 2015/01/13 15:23:34 UTC

[jira] [Comment Edited] (OPENJPA-2559) OpenJPA silently ignores assigning a null value to a non-nullable column

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

Vermeulen edited comment on OPENJPA-2559 at 1/13/15 2:23 PM:
-------------------------------------------------------------

As mentioned on the openjpa-dev mailing list, @Column(nullable = false) is a hint for generating the database schema, not a hint for runtime checks. The exception should come from the database itself when it has the correct schema.

I still believe this is a bug because no PersistenceException is thrown at all when the entitymanager flushes changes to the database. Additionally, after this situation occurs, the resulting detached entity has a value for the column that is definitely not consistent with what is in the database. This can lead to unexpected problems in the application using OpenJPA for persistence.

I guess somehow the null value is skipped instead of issuing an update statement to the database to set the column to null.



was (Author: slowstrider):
As mentioned on the openjpa-dev mailing list, @Column(nullable = false) is a hint for generating the database schema, not a hint for runtime checks. The exception should come from the database itself when it has the correct schema.

I still believe this is a bug because no PersistenceException is thrown at all when the entitymanager flushes changes to the database.

I guess somehow the null value is skipped instead of issuing an update to set the column to null.


> OpenJPA silently ignores assigning a null value to a non-nullable column
> ------------------------------------------------------------------------
>
>                 Key: OPENJPA-2559
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2559
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 2.3.0
>            Reporter: Vermeulen
>         Attachments: NonNullable.java, NonNullableColumnTest.java
>
>
> OpenJPA should throw a PersistenceException when you merge an entity that has null for a field that is mapped to a non-nullable column (@Column(nullable = false)). This should also happen when you set the field to null for an attached entity and then commit the change.
> This works fine for entities that haven't been persisted yet (INSERT). However this does NOT happen for entities that are already persistent with a non-null value for the field (UPDATE). When doing entityManager.merge, the returned entity has null for the field, but the database still has the old value. The entity returned by entityManager.find also returns this old non-null value. Similarly, after setting the field to null on an attached entity and committing the transaction it is still null in the entity, but not in the database.
> This behavior makes it a lot harder to detect programming errors where you accidentally attempt to update a non-nullable column to null, or where you made a mistake in the mapping and actually expected the column to be nullable. (Unless you also use the JSR 303 @NotNull annotation.)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)