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) >
