使冬眠实体与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的一部分,但这是可行的,您可以将列类型重新映射到您认为更合适的位置。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...