首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用hibernate将LocalDateTime作为ISO-String保存在sqlite中

使用hibernate将LocalDateTime作为ISO-String保存在sqlite中
EN

Stack Overflow用户
提问于 2021-03-24 11:11:47
回答 1查看 296关注 0票数 0

我有一个Sqlite和下表:

代码语言:javascript
运行
复制
CREATE TABLE foo (id bigint not null, from datetime, to datetime, (...) primary key (id));

对应的hibernate-实体是:

代码语言:javascript
运行
复制
@Entity
@Table(name = "foo")
public class Foo implements Serializable {

    @Id
    @Column(name = "id")
    private Long id;
    @Column(name = "from")
    private LocalDateTime from;
    @Column(name = "to")
    private LocalDateTime to;
    ...

}

当持久化这样一个实体时,hibernate总是将LocalDateTime-字段插入为int (unix时间戳)。

有没有办法让hibernate将这些时间戳作为ISO-String插入?根据sqlite文档的说法,sqlite能够以下列一种格式存储日期,因此至少在技术上可以这样做:

SQLite没有预留用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为文本、实值或整数值: 文本作为ISO8601字符串(“YYYY DD HH:MM:SS.SSS")。 真实的朱利安日数,从格林威治从公元前4714年11月24日正午起的天数,根据公历。 整数为Unix时间,自1970-01-01 00:00:00开始的秒数。

我已经尝试过重写SqliteDialect,但是它并没有改变任何东西:

代码语言:javascript
运行
复制
public class MySqliteDialect extends SQLiteDialect {

    public MySqliteDialect() {
        super();
        registerColumnType( Types.TIMESTAMP, "text" );
    }
}

tl;dr:如何将实体中的LocalDateTime字段存储在sqlite中的datetime列中作为ISO-string?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 17:11:22

不知道为什么只有很少的文档记录,但事实证明sqlite驱动程序中有一个属性控制着这种行为:

因此,解决我的问题的方法是在hibernate-properties中将data_class属性设置为TEXT

代码语言:javascript
运行
复制
properties.setProperty("hibernate.connection.date_class", "TEXT");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66779817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档