HHH-14885 - New composite user-type

`@EmbeddableInstantiatorRegistration`
This commit is contained in:
Steve Ebersole 2021-12-01 20:47:14 -06:00
parent 61d178ef1b
commit 9137b9e79a
4 changed files with 12 additions and 8 deletions

View File

@ -262,8 +262,9 @@ values follow Java Bean conventions - e.g. a struct or Java 15 record.
Hibernate allows the use of a custom instantiator for creating the embeddable instances through the Hibernate allows the use of a custom instantiator for creating the embeddable instances through the
`org.hibernate.metamodel.spi.EmbeddableInstantiator` contract. The custom instantiator is specified `org.hibernate.metamodel.spi.EmbeddableInstantiator` contract. The custom instantiator is specified
using the `@org.hibernate.annotations.EmbeddableInstantiator` annotation. Which can either be defined using the `@org.hibernate.annotations.EmbeddableInstantiator` annotation.
on the property:
A custom instantiator can be defined on the property:
[[embeddable-instantiator-property-ex]] [[embeddable-instantiator-property-ex]]
.`@EmbeddableInstantiator` on attribute .`@EmbeddableInstantiator` on attribute
@ -271,6 +272,7 @@ on the property:
[source, JAVA, indent=0] [source, JAVA, indent=0]
---- ----
include::{instantiatorTestDir}/embedded/Name.java[tags=embeddable-instantiator-property] include::{instantiatorTestDir}/embedded/Name.java[tags=embeddable-instantiator-property]
include::{instantiatorTestDir}/embedded/Person.java[tags=embeddable-instantiator-property] include::{instantiatorTestDir}/embedded/Person.java[tags=embeddable-instantiator-property]
---- ----
==== ====
@ -283,12 +285,13 @@ or on the embeddable class:
[source, JAVA, indent=0] [source, JAVA, indent=0]
---- ----
include::{instantiatorTestDir}/embeddable/Name.java[tags=embeddable-instantiator-class] include::{instantiatorTestDir}/embeddable/Name.java[tags=embeddable-instantiator-class]
include::{instantiatorTestDir}/embeddable/Person.java[tags=embeddable-instantiator-class] include::{instantiatorTestDir}/embeddable/Person.java[tags=embeddable-instantiator-class]
---- ----
==== ====
Additionally, instantiators can be registered: or registered:
[[embeddable-instantiator-registration-ex]] [[embeddable-instantiator-registration-ex]]
.`@EmbeddableInstantiatorRegistration` .`@EmbeddableInstantiatorRegistration`
@ -296,6 +299,7 @@ Additionally, instantiators can be registered:
[source, JAVA, indent=0] [source, JAVA, indent=0]
---- ----
include::{instantiatorTestDir}/registered/Name.java[tags=embeddable-instantiator-registration] include::{instantiatorTestDir}/registered/Name.java[tags=embeddable-instantiator-registration]
include::{instantiatorTestDir}/registered/Person.java[tags=embeddable-instantiator-registration] include::{instantiatorTestDir}/registered/Person.java[tags=embeddable-instantiator-registration]
---- ----
==== ====

View File

@ -17,9 +17,9 @@ import jakarta.persistence.Entity;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.Table; import jakarta.persistence.Table;
@Entity(name = "Person")
@Table(name = "persons") @Table(name = "persons")
//tag::embeddable-instantiator-class[] //tag::embeddable-instantiator-class[]
@Entity
public class Person { public class Person {
@Id @Id
public Integer id; public Integer id;

View File

@ -20,9 +20,9 @@ import jakarta.persistence.Id;
import jakarta.persistence.Table; import jakarta.persistence.Table;
//tag::embeddable-instantiator-property[]
@Entity(name = "Person")
@Table(name = "persons") @Table(name = "persons")
//tag::embeddable-instantiator-property[]
@Entity
public class Person { public class Person {
@Id @Id
public Integer id; public Integer id;

View File

@ -20,9 +20,9 @@ import jakarta.persistence.Id;
import jakarta.persistence.Table; import jakarta.persistence.Table;
//tag::embeddable-instantiator-registration[]
@Entity(name = "Person")
@Table(name = "persons") @Table(name = "persons")
//tag::embeddable-instantiator-registration[]
@Entity
@EmbeddableInstantiatorRegistration( embeddableClass = Name.class, instantiator = NameInstantiator.class ) @EmbeddableInstantiatorRegistration( embeddableClass = Name.class, instantiator = NameInstantiator.class )
public class Person { public class Person {
@Id @Id