[
https://issues.apache.org/jira/browse/OPENJPA-2559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14499501#comment-14499501
]
Vermeulen commented on OPENJPA-2559:
------------------------------------
Yes, I forgot to mention that I used these settings in the test case:
{quote}
<property name="openjpa.DetachState"
value="fetch-groups(DetachedStateField=false)" />
<property name="openjpa.AutoDetach" value="commit" />
{quote}
We have a client/server application where we serialize entities to transfer
them from server to client. The client edits the state and sends them back to
the server to merge.
I thought it would be ugly if the client depends on the presence of a detached
state field so I turned that off.
(I do think it is a valid architecture to use the entities as domain-model
objects on the client. This prevents duplicated logic and unnecessary DTO's.
The only drawback is that the client requires a library with the JPA
annotations but it shouldn't require the implementation.)
> 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)