微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使冬眠实体与Postgres和sqlite一起用于json字段

如何解决使冬眠实体与Postgres和sqlite一起用于json字段

需要在远程设备(以sqlite为后盾)以及云(以postgres为后盾)上运行相同版本的应用程序。帐户实体如下:

        @Entity
        @Table(name="account")
        public class Account extends BaseEntity{

        @Id
        @Column(name="id")
        private String id;

        @Column(name="valid_from")
        private LocalDateTime validFrom;

        @Column(name="expires_on")
        private LocalDateTime expiresOn;

        @Column(name="events")
        @Convert(converter = EventListConverter.class)
        @NotNull
        @NotEmpty
        private List<Event> events;

EventListConverter正在将events转换为JSON字符串,然后将其转换为sqlite的List<Event>。但是,在Postgres上,events列的类型为jsonb-我们如何才能使其同时适用?

约束: 不能更改POSTGRES模式(尽管sqlite中的事件可以更改为二进制)

解决方法

我想问题是生成的DDL是因为您使用hbm2ddl更新吗?

我建议您通过Liquibase或Flyway之类的工具进行模式更新,因为这些工具可以为每个DBMS定义DDL。如果确实必须使用hbm2ddl,则可以将Dialect实现的子类化,并提供自定义的TableExporter。您需要复制StandardTableExporter的一部分,但这是可行的,您可以将列类型重新映射到您认为更合适的位置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?