【问题标题】:Customize column mapping in hibernate在休眠中自定义列映射
【发布时间】:2021-11-09 01:18:10
【问题描述】:

我是hibernate的初学者,不知道有没有办法从数据库中的一种类型映射到另一种类型到类中的@Column注解。在我的具体示例中,有一个持续时间作为 BIGINT 保存在数据库中,表示秒数,我想将其映射到我的实体对象中的java.time.Duration。我正在从事一个 Spring 项目。

表(我是用flyway创建的,我没有使用hibernate自动创建表):

CREATE TABLE times (
  id       BIGINT      PRIMARY KEY     AUTO_INCREMENT,
  duration BIGINT
);

实体类:

@Entity
@Table("times")
class TimeEntity {
  @Id
  private Long id;

  @Column("duration")
  private Duration duration;
  // - when reading from DB I would like to assign:
  // :: Duration.ofSeconds(<duration bigint from database>)
  // - when writing to DB I would like to write:
  // :: duration.toSeconds(); -> long
}

是否可以通过hibernate来实现?

【问题讨论】:

    标签: java hibernate spring-data-jpa


    【解决方案1】:

    根据Hibernate documentation ,有一个DurationTypeBIGINT 映射到java.time.Duration。所以你不需要任何自定义映射,声明一个Duration 字段类型就足够了。

    如果您使用的是旧版本的 Hibernate,您可能需要添加 hibernate-java8 作为项目依赖项。

    警告:默认转换器将 sql 类型转换为/从 nanos,因此您可能需要一个辅助方法,或覆盖 DurationType 以转换为/从秒。

    【讨论】:

      猜你喜欢
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多