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) <[email protected]> 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)
>

Reply via email to