0

需要在远程设备(由 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 字符串并返回到List<Event>SQLite。但是,该events列是jsonbPostgres 上的类型 - 我们如何使它对两者都有效?

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

4

1 回答 1

0

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

我建议您通过 Liquibase 或 Flyway 等工具进行架构更新,因为这些工具可以为每个 DBMS 定义 DDL。如果你真的必须使用 hbm2ddl,你可以子类化Dialect实现并提供一个自定义的TableExporter. 您需要复制一些StandardTableExporter但它是可行的,您可以将列类型重新映射到您认为更合适的任何内容。

于 2020-09-08T06:47:11.500 回答