Interface JpaCompliance

All Known Subinterfaces:
MutableJpaCompliance
All Known Implementing Classes:
JpaComplianceImpl, MutableJpaComplianceImpl

public interface JpaCompliance
Encapsulates settings controlling whether Hibernate complies strictly with certain debatable strictures of the JPA specification.
  • Method Details

    • isJpaQueryComplianceEnabled

      boolean isJpaQueryComplianceEnabled()
      Controls whether Hibernate's handling of JPA's Query (JPQL, Criteria and native-query) should strictly follow the JPA spec. This includes parsing and translating a query as JPQL instead of HQL, as well as whether calls to the Query methods always throw the exceptions defined by the specification.

      Deviations result in an exception, if enabled.

      Returns:
      true indicates to behave in the spec-defined way
      See Also:
    • isJpaTransactionComplianceEnabled

      boolean isJpaTransactionComplianceEnabled()
      Indicates that Hibernate's Transaction should behave as defined by the specification for JPA's EntityTransaction since it extends it.
      Returns:
      true indicates to behave in the spec-defined way
      See Also:
    • isJpaClosedComplianceEnabled

      boolean isJpaClosedComplianceEnabled()
      JPA defines specific exceptions on specific methods when called on EntityManager and EntityManagerFactory when those objects have been closed. This setting controls whether the spec defined behavior or Hibernate's behavior will be used.

      If enabled Hibernate will operate in the JPA specified way throwing exceptions when the spec says it should with regard to close checking

      Returns:
      true indicates to behave in the spec-defined way
      See Also:
    • isJpaCascadeComplianceEnabled

      @Deprecated(since="7.0") boolean isJpaCascadeComplianceEnabled()
      Deprecated.
      No longer has any effect.
    • isJpaProxyComplianceEnabled

      boolean isJpaProxyComplianceEnabled()
      JPA spec says that an EntityNotFoundException should be thrown when accessing an entity proxy which does not have an associated table row in the database.

      Traditionally, Hibernate does not initialize an entity Proxy when accessing its identifier since we already know the identifier value, hence we can save a database round trip.

      If enabled Hibernate will initialize the entity proxy even when accessing its identifier.

      Returns:
      true indicates to behave in the spec-defined way
      See Also:
    • isJpaCacheComplianceEnabled

      boolean isJpaCacheComplianceEnabled()
      Should Hibernate comply with all aspects of caching as defined by JPA? Or can it deviate to perform things it believes will be "better"?
      Returns:
      true indicates to behave in the spec-defined way
      See Also:
      Implementation Note:
      Effects include marking all secondary tables as non-optional. The reason being that optional secondary tables can lead to entity cache being invalidated rather than updated.
    • isGlobalGeneratorScopeEnabled

      boolean isGlobalGeneratorScopeEnabled()
      Should the scope of TableGenerator.name() and SequenceGenerator.name() be considered globally or locally defined?
      Returns:
      true if the generator name scope is considered global
      See Also:
    • isJpaOrderByMappingComplianceEnabled

      boolean isJpaOrderByMappingComplianceEnabled()
      Should we strictly handle OrderBy expressions?

      JPA says the order-items can only be attribute references whereas Hibernate supports a wide range of items. With this enabled, Hibernate will throw a compliance error when a non-attribute-reference is used.

      See Also:
    • isLoadByIdComplianceEnabled

      boolean isLoadByIdComplianceEnabled()
      JPA says that the id passed to EntityManager.getReference(java.lang.Class<T>, java.lang.Object) and EntityManager.find(java.lang.Class<T>, java.lang.Object) should be exactly the expected type, allowing no type coercion.

      Historically, Hibernate behaved the same way. Since 6.0 however, Hibernate has the ability to coerce the passed type to the expected type. For example, an Integer may be widened to Long. Coercion is performed by calling JavaType.coerce(X, org.hibernate.type.descriptor.java.JavaType.CoercionContext).

      This setting controls whether such coercion should be allowed.

      Since:
      6.0
      See Also: