我们很高兴宣布Hibernate ORM 5.5.0.Final新版本的发布!
开始使用Jakarta JPA API
从5.5版本开始,Hibernate发布带有"-jakarta"后缀的artifacts,以实现Jakarta JPA API。
撰写本文时,以下Jakarta artifacts已发布
-
hibernate-core-jakarta
-
hibernate-envers-jakarta
-
hibernate-jpamodelgen-jakarta
-
hibernate-testing-jakarta
由于Jakarta JPA 3.0没有引入任何新功能,所需更改仅为将命名空间从javax.persistence
更改为jakarta.persistence
。
要开始使用,您需要一个至少依赖于org.hibernate:hibernate-core-jakarta
的项目,如下所示
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core-jakarta</artifactId>
<version>5.5.0.Final</version>
</dependency>
Jakarta版本还使用Jakarta XML Binding API,因此您还需要一个Jakarta XML Binding实现
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>3.0.0</version>
</dependency>
如果您正在使用Java 8并且在JAXB相关代码中遇到NullPointerException
,请确保您正在使用3.0.1
版本的jakarta.xml.bind:jakarta.xml.bind-api
,它包含对问题的修复。由于现在每个人都至少使用Java 11+,您可能根本不会遇到此问题 :)
如果您还不想切换到Jakarta JPA API,您当然可以继续使用常规artifacts,如hibernate-core
等。撰写本文时,我们尚未决定何时将主要artifacts(如hibernate-core
等)更改为使用Jakarta JPA API,但请放心,至少对于Hibernate ORM 6.0,我们将继续使用JPA API。即使我们进行切换,我们也在考虑创建具有-jpa
后缀的独立artifacts,以实现JPA 2.2 API,这样您就可以继续使用最新的Hibernate,而无需切换到Jakarta JPA API。
让我们考虑一个表示人的简单实体
import jakarta.persistence.*;
import java.io.Serializable;
@Entity(name = "Person")
@Table(name = "PERSON")
public class Person implements Serializable {
@Id
@GeneratedValue
@Column(name = "ID")
protected Long id;
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "BODY_WEIGHT")
private Float bodyWeight;
// Getters and Setters
}
我们可以使用Jakarta JPA 3.0 API轻松保存和查询该实体,就像使用JPA 2.2 API一样
import org.junit.*;
import jakarta.persistence.*;
public class JPAUnitTestCase {
private EntityManagerFactory entityManagerFactory;
@Before
public void init() {
entityManagerFactory = Persistence.createEntityManagerFactory( "templatePU" );
}
@After
public void destroy() {
entityManagerFactory.close();
}
@Test
public void testJakarta() throws Exception {
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
Person person = new Person();
person.setFirstName( "John" );
person.setLastName( "Smith" );
entityManager.persist( person );
Person p = entityManager.createQuery( "select p from Person p", Person.class )
.getSingleResult();
Assert.assertNotNull( p );
entityManager.getTransaction().commit();
entityManager.close();
}
}
如果您只想查看预构建的示例并进行测试,请查看此示例仓库!
请注意,Jakarta artifacts仍被视为实验性的。
这就完成了,享受Jakarta的精彩吧!
获取5.5.0.Final版本
所有详细信息都可以在hibernate.org上的专用页面找到,并保持最新。