从 JPA 2.x 迁移到 3.0
创始人
2024-03-17 04:22:29
0

我最近收到了很多关于JPA 3.0的问题,由于EclipseLink和Hibernate现在提供了对它的全面支持,现在是时候仔细看看规范的最新更新了。作为从Java EE到Jakarta EE转换的一部分,Java Persistence API(JPA)更名为Jakarta Persistence API(JPA)。该过程的第一步发生在 JPA 2.2 中,现在在 JPA 3.0 中完成。让我们仔细看看 JPA 3.0 中引入的更改以及所需的迁移步骤。

内容[隐藏]

  • 1它不同,但仍然相同
  • 阿拉伯数字实现 JPA 3.0 的框架
  • 3迁移现有应用程序
    • 3.1更改与 JPA 相关的导入
    • 3.2更新 XML 命名空间
    • 3.3迁移配置参数
  • 四结论

它不同,但仍然相同

如果你仔细看看JPA 3.0,似乎什么都没有改变。这并非完全错误。JPA 3.0 没有带来任何新功能。它仅更改所有 API 类的包名称的前缀、某些配置属性的前缀以及所有基于 XML 的配置文件的架构命名空间。这些更改的目的是替换“java”一词以避免法律问题。

软件包名称和配置参数名称的前缀从javax.persistence.*更改为jakarta.persistence.*,例如,@Entity注释所需的导入从javax.persistence.Entity更改为jakarta.persistence.Entity,javax.persistence.schema-generation.database.action属性的名称更改为jakarta.persistence.schema-generation.database.action.除此之外,XML 命名空间从http://xmlns.jcp.org/xml/ns/persistence和 http://xmlns.jcp.org/xml/ns/persistence/orm更改为https://jakarta.ee/xml/ns/persistence
https://jakarta.ee/xml/ns/persistence/orm

这些更改完成了从 Java EE 到 Jakarta EE 的过渡过程。遗憾的是,它们还要求您迁移代码和配置文件。

实现 JPA 3.0 的框架

JPA 规范的 2 个最流行的实现支持版本 3.0。如果要使用 EclipseLink,则至少需要使用 3.0 版。

1

2

3

4

5

<dependency>

    <groupId>org.eclipse.persistencegroupId>

    <artifactId>org.eclipse.persistence.jpaartifactId>

    <version>3.0.1version>

dependency>

Hibernate在5.5版本中开始支持JPA 3.0。所有支持新 JPA 3.0 API 的 Hibernate 工件的名称中都有后缀“-jakarta”。如果仍想使用旧的 API,可以坚持使用旧的工件名称。

1

2

3

4

5

<dependency>

    <groupId>org.hibernategroupId>

    <artifactId>hibernate-core-jakartaartifactId>

    <version>5.5.2version>

dependency>

迁移现有应用程序

将依赖项更新为上面列出的依赖项之一后,需要对导入语句和配置文件进行一些更改。但是,别担心,它并不像看起来那么糟糕。您可以使用 IDE 中的搜索和替换功能或在命令行上执行一些基本命令来完成大部分工作。

更改与 JPA 相关的导入

如前所述,与 JPA 2.2 相比,JPA 3.0 没有添加或更改任何功能。它只是将包从javax.persistence更改为jakarta.persistence。因此,您可以简单地将所有出现的“import javax.persistence”替换为“import jakarta.persistence”。

执行此操作后,实体类的导入应类似于以下代码段,并且所有映射定义都应保持不变。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

import jakarta.persistence.Entity;

import jakarta.persistence.FetchType;

import jakarta.persistence.GeneratedValue;

import jakarta.persistence.GenerationType;

import jakarta.persistence.Id;

import jakarta.persistence.ManyToOne;

import jakarta.persistence.Version;

@Entity

public class ChessGame {

     

    @Id

    @GeneratedValue(strategy = GenerationType.SEQUENCE)

    private Long id;

    private LocalDate date;

    private int round;

    @Version

    private int version;

    @ManyToOne

    private ChessTournament chessTournament;

    @ManyToOne(fetch = FetchType.LAZY)

    private ChessPlayer playerWhite;

     

    @ManyToOne(fetch = FetchType.LAZY)

    private ChessPlayer playerBlack;

     

    ...

}

更新 XML 命名空间

如果使用orm.xml持久性.xml文件来定义映射或配置持久性单元,则还应更新命名空间和架构定义。

在持久性.xml配置中,需要将http://xmlns.jcp.org/xml/ns/persistence替换为https://jakarta.ee/xml/ns/persistence

1

2

3

4

5

6

7

8

9

xml version="1.0" encoding="UTF-8" standalone="yes"?>

<persistence xmlns="Jakarta Persistence XML Schemas | The Eclipse Foundation"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             version="3.0"

             xsi:schemaLocation="Jakarta Persistence XML Schemas | The Eclipse Foundation https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">

    <persistence-unit name="my-persistence-unit">

        ...

    persistence-unit>

persistence>

在包含映射定义的orm.xml文件中,您需要将 http://xmlns.jcp.org/xml/ns/persistence/orm替换为https://jakarta.ee/xml/ns/persistence/orm

1

2

3

4

5

6

7

8

xml version="1.0" encoding="UTF-8" standalone="yes"?>

<entity-mappings version="3.0"

    xmlns="https://jakarta.ee/xml/ns/persistence/orm"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <entity class="com.thorben.janssen.model.ChessPlayer" name="ChessPlayer">

        ...

    entity>

entity-mappings>

迁移配置参数

要将应用程序迁移到 JPA 3.0,您需要做的最后一件事是更新配置参数的名称。这些通常在您的持久性.xml文件中定义和使用,我在JPA 持久性初学者指南中详细介绍了所有这些.xml。

其中一些属性的名称包括前缀“javax.persistence”,例如“javax.persistence.jdbc.driver”。对于所有这些参数,您需要将“javax.persistence”替换为“jakarta.persistence”。执行此操作后,您的配置类似于以下代码片段。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

xml version="1.0" encoding="UTF-8" standalone="yes"?>

<persistence xmlns="Jakarta Persistence XML Schemas | The Eclipse Foundation"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             version="3.0"

             xsi:schemaLocation="Jakarta Persistence XML Schemas | The Eclipse Foundation https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">

    <persistence-unit name="my-persistence-unit">

        <description>Hibernate example configuration - thorben-janssen.comdescription>

        <exclude-unlisted-classes>falseexclude-unlisted-classes>

        <properties>

            <property name="hibernate.jdbc.time_zone" value="UTC"/>

            <property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/>

            <property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/>

            <property name="jakarta.persistence.jdbc.user" value="postgres"/>

            <property name="jakarta.persistence.jdbc.password" value="postgres"/>

            <property name="jakarta.persistence.schema-generation.database.action" value="drop-and-create"/>

            <property name="jakarta.persistence.sql-load-script-source" value="data.sql"/>

        properties>

    persistence-unit>

persistence>

结论

JPA 3.0 更改了所有类的包、配置文件的 XML 命名空间以及一些配置参数的名称,以完成从 Java 持久性 API 到 Jakarta 持久性 API 的转换。特别是包名称的更改可能看起来像一个巨大的变化,导致现有项目中的大量工作。但它并不像看起来那么糟糕。您可以使用 IDE 的搜索和替换功能或基本 shell 脚本轻松更改导入语句。

相关内容

热门资讯

专业文章丨跨境模具纠纷高效和解... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 (本文转载自北京市京师律师事务所...
全总等三部门联合发布2025年... 新华社北京12月25日电(记者樊曦、冯家顺)记者12月25日从全国总工会了解到,全国总工会与最高人民...
对“问题法规”要及时纠正 从事网约车经营要求车辆购置总价不得低于12万元、残疾人机动轮椅车登记需有本市常住户籍……日前提请全国...
专业文章丨相对不起诉:一起交通... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 (本文转载自北京市京师郑州律师事...
巡回审判进商场 两起纠纷就地解 央广网长春12月26日消息(记者舒震)“真没想到法官能把法庭‘搬’到商场里来,更没想到当庭就把我们的...
专业文章丨赠与车辆未交付 可以... 【珠海律师、珠海法律咨询、珠海律师事务所、京师律所、京师珠海律所】 (本文转载自北京市京师合肥律师事...
广西重拳打击制售假劣农资犯罪 ... 中新网南宁12月26日电 (韦小婷)广西壮族自治区农业农村厅25日介绍,今年开春以来,该厅在广西开展...
政策面前瞻:多元工具下的宽松红... 我们来聊聊今年政策的整体变化。感受特别明显的是,今年政策利率的锚发生了一些切换,包括货币政策投放工具...
政策力挺消费!这波逢低布局机会... 板块轮动已经成为A股常态。被看作“长坡厚雪”的消费板块,已经走过了一段漫长的调整路,估值也跌回了历史...