Hibernate JIRA | Gábor Varga | 10 months ago
Click on the to mark the solution that helps you, Samebug will learn from it.
As a community member, you’ll be rewarded for you help.
  1. 0

    When calling {{StatelessSession.get(Class, Serializable, LockMode)}} with a {{null}} {{LockMode}} argument, a {{NullPointerException}} is thrown from the following code path: {code} java.lang.NullPointerException at org.hibernate.persister.entity.AbstractEntityPersister.load( at org.hibernate.persister.entity.AbstractEntityPersister.load( at org.hibernate.internal.StatelessSessionImpl.get( at org.hibernate.internal.StatelessSessionImpl.get( {code} 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: {code:java} if ( lockOptions.getLockMode() == null ) { lockOptions.setLockMode(DEFAULT_LOCK_MODE); } {code} 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}}.

    Hibernate JIRA | 10 months ago | Gábor Varga

    Root Cause Analysis

    1. java.lang.NullPointerException

      No message provided

      at org.hibernate.persister.entity.AbstractEntityPersister.load()
    2. Hibernate
      1. org.hibernate.persister.entity.AbstractEntityPersister.load(
      2. org.hibernate.persister.entity.AbstractEntityPersister.load(
      3. org.hibernate.internal.StatelessSessionImpl.get(
      4. org.hibernate.internal.StatelessSessionImpl.get(
      4 frames