项目同时使用 MySQL 和 PostgreSQL 时从 JsonStringType 切换到 JsonBinaryType

Switch from JsonStringType to JsonBinaryType when the project uses both MySQL and PostgreSQL(项目同时使用 MySQL 和 PostgreSQL 时从 JsonStringType 切换到 JsonBinaryType)
本文介绍了项目同时使用 MySQL 和 PostgreSQL 时从 JsonStringType 切换到 JsonBinaryType的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


当需要从 PostgreSQL 切换到 MariaDB/MySql 时,我的 json 列有问题.
我使用 Spring Boot + JPA + Hibernate + hibernate-types-52.
我要映射的表是这样的:


I have a problem with column json when it's necessary to switching from PostgreSQL to MariaDB/MySql.
I use Spring Boot + JPA + Hibernate + hibernate-types-52.
The table i want to map is like this:

CREATE TABLE atable(
 ...
 acolumn JSON,
 ... 
);

好的,它适用于 PostgreSQL 和 MariaDB/MySql.
问题是当我想部署一个应用程序时,因为 PostgreSQL 和 MySQL/MariaDB 的正确 hibernate-types-52 实现不同,所以可以轻松地从一个切换到另一个应用程序

这适用于 MySQL/MariaDB

Ok it works for PostgreSQL and MariaDB/MySql.
The problem is when i want to deploy an application that switch easly from one to another because the correct hibernate-types-52 implementation for PostgreSQL and MySQL/MariaDB are different

This works on MySQL/MariaDB

@Entity
@Table(name = "atable")
@TypeDef(name = "json", typeClass = JsonStringType.class)
  public class Atable {
  ...
  @Type(type = "json")
  @Column(name = "acolumn", columnDefinition = "json")
  private JsonNode acolumn;
  ...
}

这适用于 PosgreSQL

This works on PosgreSQL

@Entity
@Table(name = "atable")
@TypeDef(name = "json", typeClass = JsonBinaryType.class)
public class Atable {
  ...
  @Type(type = "json")
  @Column(name = "acolumn", columnDefinition = "json")
  private JsonNode acolumn;
  ...
}

任何从 JsonBinaryType 切换到 JsonStringType 的解决方案(或解决此问题的任何其他解决方案)都值得赞赏.

Any kind of solutions to switch from JsonBinaryType to JsonStringType (or any other solution to solve this) is appreciated.

推荐答案

2.11 版本的 Hibernate Types 项目开始,您可以只使用 JsonType,它适用于 PostgreSQL、MySQL、Oracle、SQL Server 或 H2.

Starting with the 2.11 version of the Hibernate Types project, you can just use the JsonType, which works with PostgreSQL, MySQL, Oracle, SQL Server, or H2.

所以,使用 JsonType 而不是 JsonBinaryTypeJsonStringType

So, use JsonType instead of JsonBinaryType or JsonStringType

@Entity
@Table(name = "atable")
@TypeDef(name = "json", typeClass = JsonType.class)
public class Atable {

  @Type(type = "json")
  @Column(name = "acolumn", columnDefinition = "json")
  private JsonNode acolumn;

}

就是这样!

这篇关于项目同时使用 MySQL 和 PostgreSQL 时从 JsonStringType 切换到 JsonBinaryType的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)