gpt4 book ai didi

hibernate - 如何将 Java 8 LocalDateTime 与 JPA 和 Hibernate 一起使用

转载 作者:行者123 更新时间:2023-12-03 13:04:05 25 4
gpt4 key购买 nike

我有以下类描述片段:

... 
@Column(name = "invalidate_token_date")
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime invalidateTokenDate;
....

此代码在 Hibernate 4 上不起作用,因为 @Temporal不支持 LocalDateTime.
我从 Joda-Time 看到了有关如何使用 LocalDateTime 的建议,但我使用的是 Java 8。

最佳答案

从 2.2 版开始,JPA 支持映射 Java 8 日期/时间 API,例如 LocalDateTime , LocalTime , LocalDateTimeTime , OffsetDateTimeOffsetTime .
此外,即使使用 JPA 2.1,Hibernate 5.2 默认也支持所有 Java 8 日期/时间 API。
在 Hibernate 5.1 和 5.0 中,您必须添加 hibernate-java8 Maven 依赖。
因此,假设我们有以下实体:

@Entity(name = "UserAccount")
@Table(name = "user_account")
public class UserAccount {

@Id
private Long id;

@Column(name = "first_name", length = 50)
private String firstName;

@Column(name = "last_name", length = 50)
private String lastName;

@Column(name = "subscribed_on")
private LocalDateTime subscribedOn;

//Getters and setters omitted for brevity
}
注意 subscribedOn属性是 LocalDateTime Java 对象。
当持久化 UserAccount :
UserAccount user = new UserAccount()
.setId(1L)
.setFirstName("Vlad")
.setLastName("Mihalcea")
.setSubscribedOn(
LocalDateTime.of(
2020, 5, 1,
12, 30, 0
)
);

entityManager.persist(user);
Hibernate 生成正确的 SQL INSERT 语句:
INSERT INTO user_account (
first_name,
last_name,
subscribed_on,
id
)
VALUES (
'Vlad',
'Mihalcea',
'2020-05-01 12:30:00.0',
1
)
获取 UserAccount 时实体,我们可以看到 LocalDateTime从数据库中正确获取:
UserAccount userAccount = entityManager.find(
UserAccount.class, 1L
);

assertEquals(
LocalDateTime.of(
2020, 5, 1,
12, 30, 0
),
userAccount.getSubscribedOn()
);

关于hibernate - 如何将 Java 8 LocalDateTime 与 JPA 和 Hibernate 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com