================== Embeddable classes ================== .. contents:: :depth: 3 Embeddable classes group the properties for :doc:`../entity`. Embeddable definition ===================== The following code snippet shows how to define an embeddable: .. code-block:: java @Embeddable public class Address { final String city; final String street; @Column(name = "ZIP_CODE") final String zip; public Address(String city, String street, String zip) { this.city = city; this.street = street; this.zip = zip; } } The embeddable class is used as the entity field type: .. code-block:: java @Entity public class Employee { @Id Integer id; Address address; } The above entity definition is equivalent to following one: .. code-block:: java @Entity public class Employee { @Id Integer id; String city; String street; @Column(name = "ZIP_CODE") String zip; } .. note:: In Java 14 and later version, you can annotate `records`_ with ``@Embeddable``: .. code-block:: java @Embeddable public record Address( String city, String street, @Column(name = "ZIP_CODE")String zip) { } .. _records: https://openjdk.java.net/jeps/359 Naming convention ----------------- A naming convention is inherited from the enclosing :doc:`../entity`. Field definition ================ By default, the fields are persistent and correspond to the database columns or result set columns. The field type must be one of the following: * :doc:`basic` * :doc:`domain` * java.util.Optional, whose element is either :doc:`basic` or :doc:`domain` * java.util.OptionalInt * java.util.OptionalLong * java.util.OptionalDouble .. code-block:: java @Embeddable public class Address { ... String street; } Column ------ You can specify the corresponding column name with the ``@Column`` annotation: .. code-block:: java @Column(name = "ZIP_CODE") final String zip; Transient --------- If an embeddable has fields that you don’t want to persist, you can annotate them using ``@Transient``: Method definition ================= There are no limitations in the use of methods. Example ======= .. code-block:: java Employee employee = new Employee(); // Entity Address address = new Address("Tokyo", "Yaesu", "103-0028"); // Embeddable employee.setAddress(address);