Describes the new features and capabilities added to Hibernate ORM in 7.2.

If migrating from earlier versions, be sure to also check out the Migration Guide for discussion of impactful changes.

@EmbeddedTable

The Jakarta Persistence compliant way to specify the table to which an embedded value maps is tedious, at best, requiring us of multiple @AttributeOverride and/or @AssociationOverride annotations -

@Entity
@Table(name="primary")
@SecondaryTable(name="secondary")
class Person {
	...

    @Embedded
    @AttributeOverride(name="street",
        column=@Column(table="secondary"))
    @AttributeOverride(name="city",
        column=@Column(table="secondary"))
    @AttributeOverride(name="state",
        column=@Column(table="secondary"))
    @AttributeOverride(name="zip",
        column=@Column(table="secondary"))
    Address address;
}

Hibernate now provides the EmbeddedTable annotation to help make this easier -

@Entity
@Table(name="primary")
@SecondaryTable(name="secondary")
class Person {
	...

    @Embedded
    @EmbeddedTable("secondary")
    Address address;
}

The annotation is only legal on top-level embedded. Placement on nested embedded values will be ignored.

Introduction of FindMultipleOption

Previous versions of Hibernate supported loading multiple entities of a type via the Session#byMultipleIds method. 7.0 added Session#findMultiple methods which accepted FindOption configuration; but, for options specific to multiple-id loading, users still had to revert to Session#byMultipleIds. 7.2 covers this gap and introduces new FindMultipleOption configuration -

  • SessionCheckMode

  • OrderingMode

  • RemovalsMode

Session#byMultipleIds and MultiIdentifierLoadAccess have been deprecated.

Child StatelessSession

Creation of child StatelessSession is now supported, just as with child Session. This is a StatelessSession which shares "transactional context" with a parent Session or StatelessSession. Use Session#statelessWithOptions or StatelessSession#statelessWithOptions instead of #sessionWithOptions.

Session parent = ...;
StatelessSession child = parent
    .statelessWithOptions()
    .connection()
    ...
    .open();

Hibernate-Vector module enhancements

Support for binary, float16 and sparse vectors were added.

@Entity
public class MyEntity {
	@Id
	UUID id;
	@JdbcTypeCode(SqlTypes.VECTOR_BINARY)
	@Array(length = 24) // Refers to the bit count
	byte[] binaryVector;
	@JdbcTypeCode(SqlTypes.VECTOR_FLOAT16)
	@Array(length = 3)
	float[] float16Vector;
	@Array(length = 3)
	SparseFloatVector sparseFloat32Vector;
}

The Hibernate Vector module currently ships with 3 sparse vector types:

  • SparseByteVector

  • SparseFloatVector

  • SparseDoubleVector

In addition to accessing the sparse indices and values, they also implement the List interface to provide access as if it were a dense vector.

Also, support for vectors in the following databases was added: