使hibernate实体与postgres和sqlite for json字段一起工作

使hibernate实体与postgres和sqlite for json字段一起工作,hibernate,sqlite,hibernate-mapping,hibernate-types,hibernate-postgresql,Hibernate,Sqlite,Hibernate Mapping,Hibernate Types,Hibernate Postgresql,需要在远程设备(由sqlite支持)和云(由postgres支持)上运行相同版本的应用程序。帐户实体看起来像: @Entity @Table(name="account") public class Account extends BaseEntity{ @Id @Column(name="id") private String id; @C

需要在远程设备(由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;

<代码>@实体 @表(name=“account”) 公共类帐户扩展BaseEntity{ @身份证 @列(name=“id”) 私有字符串id; @列(name=“valid\u from”) private LocalDateTime validFrom; @列(name=“到期日”) 私有LocalDateTime expiresOn; @列(name=“events”) @Convert(converter=EventListConverter.class) @NotNull @空空如也 私人列表活动;
EventListConverter
正在将
events
转换为JSON字符串并返回到SQLite的
List
。然而,Postgres上的
events
列的类型为
jsonb
,我们如何使其同时适用于这两种类型

限制条件:
POSTGRES模式无法更改(SQLite中的事件可以更改为二进制)

我想问题在于生成的DDL,因为您使用了hbm2ddl更新


我建议您通过Liquibase或Flyway等工具进行模式更新,因为这些工具可以为每个DBMS定义DDL。如果您真的必须使用hbm2ddl,您可以对
方言
实现进行子类化,并提供自定义
表格导出器
。您需要复制一点
标准表格导出器
,但这是可行的,您可以将列类型重新映射到您认为更合适的任何类型。

感谢您的响应。我们正在使用
Flyway
为远程计算机托管时运行
sqlite
的DDL,同时我们必须适应云的现有postgres模式。您能提供一些关于扩展
方言的更多参考吗关于重新映射列类型的部分?由于您使用Flyway,为PostgreSQL编写自定义DDL有什么问题?您只需复制
org.hibernate.tool.schema.internal.StandardTableExporter#getSqlCreateStrings
,并在呈现SQL类型时进行自定义映射,例如从“JSONB”到“text”对于sqlite,我对hibernate和flyway是相当新的,这里不在同一页:)两个问题,1.启动时flyway模式迁移-我们只想用它来管理sqlite-postgres是现有的,也被另一个应用程序使用(因此没有更改)2.一旦flyway迁移完成,服务启动(Micronat api)-flyway如何帮助使用目标数据库执行ORM,不是在hibernate实体级别吗?我可以通过将
事件
字段设置为字符串类型,并使用另一个临时字段来获取字符串的反序列化版本来解决此问题