gpt4 book ai didi

mysql - LocalDateTime 未存储在数据库中

转载 作者:可可西里 更新时间:2023-11-01 07:29:43 26 4
gpt4 key购买 nike

我正在处理 Spring 数据 JPA,我创建了一个实体,我在其中将日期设置为 LocalDateTime (Java 8)。但是当存储在数据库中时,它并没有存储实际日期,而是在数据库中存储了一些二进制类型的值。

我是否应该在数据库中使用 LocalDateTime,如果不是,我应该什么时候使用这个 java 8 日期 API。

实体文件:-

import java.time.LocalDateTime;

import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;

import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
*
* @author Ravat
*
*/

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

//@CreatedDate
@Column(name = "created_date", updatable = false)
private LocalDateTime createdDate = LocalDateTime.now();

//@LastModifiedDate
@Column(name = "updated_date")
private LocalDateTime updatedDate = LocalDateTime.now();

}

最佳答案

引用链接 How to persist LocalDate and LocalDateTime with JPA

JPA 会将其映射到 BLOB 而不是 DATE 或 TIMESTAMP。这意味着数据库不知道日期对象并且不能对其应用任何优化。那不是我们应该或想要做的方式。

但这并不意味着您不能使用 Date and Time API。您只需决定要如何为其添加支持。

如果要将 LocalDate 属性存储在 DATE 列中或将 LocalDateTime 存储在 TIMESTAMP 列中,则需要自己定义到 java.sql.Date 或 java.sql.Timestamp 的映射。

多亏了属性转换器,这是 JPA 2.1 中的几个新特性之一,只需几行代码就可以实现这一点,这可以在帖子 here 中看到。 .

例如,

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements
AttributeConverter<LocalDate, Date> {

@Override
public Date convertToDatabaseColumn(LocalDate locDate) {
return (locDate == null ? null : Date.valueOf(locDate));
}

@Override
public LocalDate convertToEntityAttribute(Date sqlDate) {
return (sqlDate == null ? null : sqlDate.toLocalDate());
}
}

您需要使用它的两个方法 convertToDatabaseColumn 和 convertToEntityAttribute 来实现 AttributeConverter 接口(interface)。正如您在方法名称上看到的那样,其中一个定义了从实体属性类型 (LocalDate) 到数据库列类型 (Date) 的转换,另一个定义了反向转换。转换本身非常简单,因为 java.sql.Date 已经提供了与 LocalDate 进行转换的方法。

此外,属性转换器需要使用@Converter 注释进行注释。由于可选的 autoApply=true 属性,转换器将应用于 LocalDate 类型的所有属性

关于mysql - LocalDateTime 未存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47410527/

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