|
Hibernate throws a NPE while deleting objects from an entity with a query like this one:
DELETE FROM UserData d WHERE d.user = :user
The problem is present only from hibernate 4.2.2+, while versions up to version 4.2.1 it works fine.
The stack trace is:
Unexpected error: java.lang.NullPointerException
java.lang.NullPointerException
at org.hibernate.collection.internal.PersistentMap.entryExists(PersistentMap.java:478)
at org.hibernate.persister.collection.OneToManyPersister.writeIndex(OneToManyPersister.java:211)
at org.hibernate.persister.collection.OneToManyPersister.doProcessQueuedOps(OneToManyPersister.java:197)
at org.hibernate.persister.collection.AbstractCollectionPersister.processQueuedOps(AbstractCollectionPersister.java:1638)
at org.hibernate.action.internal.QueuedOperationCollectionAction.execute(QueuedOperationCollectionAction.java:65)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:289)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339)
at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:62)
at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1205)
at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1285)
at org.hibernate.internal.QueryImpl.executeUpdate(QueryImpl.java:116)
at org.hibernate.ejb.QueryImpl.internalExecuteUpdate(QueryImpl.java:194)
at org.hibernate.ejb.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:99)
The User class references a UserData class in this way:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
@MapKeyColumn(name = "name")
private Map<String, UserData> userDatas;
While UserData is a simple class with only a couple strings and a reference @ManyToOne to the User class.
|