We're updating the issue view to help you get more done. 

NullPointerException when StatelessSession.get(Class, Serializable, LockMode) called with null LockMode, instead of defaulting to LockMode.NONE

Description

When calling StatelessSession.get(Class, Serializable, LockMode) with a null LockMode argument, a NullPointerException is thrown from the following code path:

1 2 3 4 5 java.lang.NullPointerException at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4004) at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3989) at org.hibernate.internal.StatelessSessionImpl.get(StatelessSessionImpl.java:182) at org.hibernate.internal.StatelessSessionImpl.get(StatelessSessionImpl.java:170)

A self-contained demo is available in

, it's runnable with mvn clean test.

When the counterpart Session.get(Class<T>, Serializable, LockMode) is called with a null LockMode, it doesn't throw an exception (and works just fine).

It seems like the LockOptions instance in AbstractEntityPersister.getAppropriateLoader(LockOptions, SharedSessionContractImplementor) has different values for its lockMode field: LockMode.NONE in case of a stateful Session, and null in case of a StatelessSession. So getLoaders().get(null) returns a null UniqueEntityLoader, and attempting to call UniqueEntityLoader.load(Serializable, Object, SharedSessionContractImplementor, LockOptions) will throw the NullPointerException.

In case of a stateful Session, the LoadEvent(Serializable, String, Object, LockOptions, boolean, EventSource) constructor has the following code:

1 2 3 if ( lockOptions.getLockMode() == null ) { lockOptions.setLockMode(DEFAULT_LOCK_MODE); }

There is no similar default value check for the StatelessSession code path.

Maybe the StatelessSession should set the default LockMode.NONE lock mode when a null argument is passed? It would be more in line with the stateful Session, and would not throw NullPointerException.

Environment

None

Status

Assignee

Chris Cranford

Reporter

Gábor Varga

Fix versions

Labels

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Affects versions

5.2.0
5.1.0
5.0.9

Priority

Minor