【问题标题】:Problem with Java LocalDate / LocalDateTime fields mapped in PostgreSQL colunmsPostgreSQL 列中映射的 Java LocalDate / LocalDateTime 字段的问题
【发布时间】:2020-05-09 02:35:08
【问题描述】:

我有一个应用程序,其中包含一些使用 LocalDate / LocalDateTime 字段的 JPA 类,并且这些字段作为 Bytea 映射到 PostgreSQL 列中。

这种方法最大的问题是我不能用SQL做查询,比如我不能查询这个:SELECT * FROM star_date BETWEEN '2020-01-01' AND '2020-01-02' ,因为 DateTime 和 date 列使用了 Bytea 类型。

下面有一个显示我当前问题场景的类示例!这个类使用 JPA 在 PostgreSQL 中生成表,所以它是自动发生的。看看创建的恶魔进入类和表的设计。

@Data
@Entity
@Table(name = "processes")
public class Process implements Serializable {
    @Id
    @GeneratedValue(generator = "ProcessSequenceGenerator")
    private Long id;
    private Long legacyId;
    private String createdBy;
    private LocalDateTime created;
}

餐桌设计:

有人遇到过这样的问题吗?

【问题讨论】:

  • 您的列的数据类型是什么,究竟?你是说这些列的类型是BYTEA
  • 提供一个MCVE,用你的JPA创建表,插入行。
  • @BasilBourque 我有一个类正在使用这样的字段: private LocalDateTime created;我使用 JPA,然后当 JPA 创建作为 postgresql 的数据库时,该字段的列被键入为 Bytea。你明白了吗?
  • 混淆层的乐趣。只需手动创建表,然后您就可以确定它们是使用正确的类型创建的。例如timestamp 可以很容易地读成LocalDateTime
  • 您需要 JPA 2.2 或更高版本才能支持 java.time 类型。见Jakarta PersistenceSearch to learn more.

标签: java postgresql localdate bytea


【解决方案1】:

我正在使用 Spring Boot 1.4.7.RELEASE!因此,解决我的问题,包括将属性 columnDefinition 和 @Convert 放入 Column 中,如下所示:

@Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
@Convert(converter = LocalDateTimeConverter.class)
private LocalDateTime created;

现在,我正在寻找一种方法将 bytea 转换为我在 postgresql 中的当前表。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2019-04-02
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2014-11-28
    • 2015-06-23
    相关资源
    最近更新 更多