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 14:45:34 UTC

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

Vermeulen created OPENJPA-2559:
----------------------------------

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


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)

RE: [jira] [Created] (OPENJPA-2559) OpenJPA silently ignores assigning a null value to a non-nullable column

Posted by Henno Vermeulen <he...@huizemolenaar.nl>.
Well, exactly that is not happening. OpenJPA has correctly generated a database schema for me with a column that is not nullable.

OpenJPA somehow skips the null value instead of try to update it to null resulting in an error situation being ignored.

Behavior is exactly the same in my example program when I add em.flush() after each merge. (I guess this is implicitly done on commit or detach using em.clear()).

Regards,
Henno Vermeulen
Huize Molenaar

-----Oorspronkelijk bericht-----
Van: Jody Grassel [mailto:fyrewyld@gmail.com] 
Verzonden: dinsdag 13 januari 2015 15:02
Aan: dev@openjpa.apache.org
Onderwerp: Re: [jira] [Created] (OPENJPA-2559) OpenJPA silently ignores assigning a null value to a non-nullable column

The @Column(nullable=false) is a schema hint that is used when OpenJPA's tooling is used to create tables on the database.  It is not a runtime filter.  Basically, OpenJPA relies on the database enforcing non-nullable columns.  If your database table schema is correct (that the column is non-nullable), then after invoking em.merge() (which is an in-memory
operation) if you invoke em.flush() then you would get the PersistenceException you're seeking.

On Tue, Jan 13, 2015 at 7:45 AM, Vermeulen (JIRA) <ji...@apache.org> wrote:

> Vermeulen created OPENJPA-2559:
> ----------------------------------
>
>              Summary: 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
>
>
> 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)
>

Re: [jira] [Created] (OPENJPA-2559) OpenJPA silently ignores assigning a null value to a non-nullable column

Posted by Jody Grassel <fy...@gmail.com>.
The @Column(nullable=false) is a schema hint that is used when OpenJPA's
tooling is used to create tables on the database.  It is not a runtime
filter.  Basically, OpenJPA relies on the database enforcing non-nullable
columns.  If your database table schema is correct (that the column is
non-nullable), then after invoking em.merge() (which is an in-memory
operation) if you invoke em.flush() then you would get the
PersistenceException you're seeking.

On Tue, Jan 13, 2015 at 7:45 AM, Vermeulen (JIRA) <ji...@apache.org> wrote:

> Vermeulen created OPENJPA-2559:
> ----------------------------------
>
>              Summary: 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
>
>
> 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)
>