|
| 1 | + |
| 2 | +### <a name="jpa-32"></a> Jakarta Persistence 3.2 |
| 3 | + |
| 4 | +7.0 migrates to Jakarta Persistence 3.2 which can be fairly disruptive. |
| 5 | +See the [Migration Guide](https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#jpa-32) for details. |
| 6 | + |
| 7 | +See [this blog post](https://in.relation.to/2024/04/01/jakarta-persistence-3/) for a summary of the changes in 3.2 |
| 8 | + |
| 9 | +- [TCK Results](https://ci.hibernate.org/view/ORM/job/hibernate-orm-tck-3.2/job/wip%252F7.0/24/) with Java 17 |
| 10 | +- [TCK Results](https://ci.hibernate.org/view/ORM/job/hibernate-orm-tck-3.2/job/wip%252F7.0/25/) with Java 21 |
| 11 | + |
| 12 | +### <a name="java-17"></a> Java 17 |
| 13 | + |
| 14 | +Version 3.2 of Jakarta Persistence requires Java 17. |
| 15 | +Hibernate 7.0 therefore baselines on Java 17 whereas previous versions baseline on Java 11. |
| 16 | + |
| 17 | +### <a name="model-validations"></a> Domain Model Validations |
| 18 | + |
| 19 | +7.0 does much more validation of an application's domain model and especially its mapping details, e.g. |
| 20 | + |
| 21 | +* illegal combinations such as `@Basic` and `@ManyToOne` on the same attribute |
| 22 | +* misplaced annotations such as an annotated getter method with FIELD access |
| 23 | +* stricter following of JavaBean conventions |
| 24 | + |
| 25 | +See the [Migration Guide](https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#model-validation) for details. |
| 26 | + |
| 27 | + |
| 28 | +### <a name="mapping-xml"></a> mapping.xsd |
| 29 | + |
| 30 | +Hibernate 7.0 provides a new XSD that represents an "extension" of the Jakarta Persistence orm.xsd weaving in Hibernate-specific mapping features. |
| 31 | +The namespace for this extended mapping is `http://www.hibernate.org/xsd/orm/mapping` |
| 32 | + |
| 33 | +For applications using Hibernate's legacy `hbm.xml` format, we provide a tool to help with the transformation. |
| 34 | +See the [Migration Guide](https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#hbm-transform) for details. |
| 35 | + |
| 36 | + |
| 37 | +### <a name="hibernate-models"></a> Hibernate Models |
| 38 | + |
| 39 | +7.0 migrates from [Hibernate Commons Annotations](https://github.com/hibernate/hibernate-commons-annotations/) (HCANN) to the new [Hibernate Models](https://github.com/hibernate/hibernate-models) project for low-level processing of an application domain model, reading annotations and weaving in XML mapping documents. |
| 40 | +See the [Migration Guide](https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#hibernate-models) for details. |
| 41 | + |
| 42 | + |
| 43 | +### <a name="json-and-xml-functions"></a> JSON and XML functions |
| 44 | + |
| 45 | +Support for most of the JSON and XML functions that the SQL standard specifies was added to HQL/Criteria. |
| 46 | +The implementations retain the SQL standard semantics and will throw an error if emulation on a database is impossible. |
| 47 | + |
| 48 | +New functions include: |
| 49 | + |
| 50 | +* construction functions like `json_array()`, `json_object()`, `xmlelement()` and `xmlforest()` |
| 51 | +* query functions like `json_value()`, `json_query()` and `xmlquery()` |
| 52 | +* aggregation functions like `json_agg()`, `json_object_agg()` and `xmlagg()` |
| 53 | +* manipulation functions like `json_set()`, `json_mergepatch()` |
| 54 | +* any many more |
| 55 | + |
| 56 | +> The functions are incubating/tech-preview - to use them in HQL it is necessary to enable the `hibernate.query.hql.json_functions_enabled` and `hibernate.query.hql.xml_functions_enabled` configuration settings. |
| 57 | +
|
| 58 | + |
| 59 | +### <a name="set-returning-functions"></a> Set-returning Functions |
| 60 | + |
| 61 | +A set-returning function is a new type of function that can return rows and is exclusive to the `from` clause. |
| 62 | +The concept is known in many different database SQL dialects and is sometimes referred to as table valued function or table function. |
| 63 | + |
| 64 | +Custom set-returning functions can be registered via a `FunctionContributor`. |
| 65 | +Out-of-the-box, some common set-returning functions are already supported or emulated |
| 66 | + |
| 67 | +* `unnest()` - allows to turn an array into rows |
| 68 | +* `generate_series()` - can be used to create a series of values as rows |
| 69 | +* `json_table()` - turns a JSON document into rows |
| 70 | +* `xmltable()` - turns an XML document into rows |
| 71 | + |
| 72 | +### <a name="any-discriminator"></a> @AnyDiscriminatorImplicitValues |
| 73 | + |
| 74 | +The new `@AnyDiscriminatorImplicitValues` offers 2 related improvements for the mapping of discriminator values |
| 75 | +for `@Any` and `ManyToAny` associations. |
| 76 | + |
| 77 | +First, it allows control over how Hibernate determines the discriminator value to store in the database for |
| 78 | +implicit discriminator mappings. Historically, Hibernate would always use the full name of the associated |
| 79 | +entity. |
| 80 | + |
| 81 | +Second, it allows mixing of explicit and implicit value strategies. |
| 82 | + |
| 83 | +See the [Migration Guide](https://docs.jboss.org/hibernate/orm/7.0/userguide/html_single/Hibernate_User_Guide.html#associations-any) for details. |
| 84 | + |
| 85 | +### <a name=cleanup"></a> Clean-up |
| 86 | + |
| 87 | +A lot of deprecated contracts and behavior has been removed. |
| 88 | +See the [Migration Guide](https://docs.jboss.org/hibernate/orm/7.0/migration-guide/migration-guide.html#cleanup) for details. |
| 89 | + |
0 commit comments