java - 如何在没有 AttributeConverter 或 customUserType 的情况下使用 Hibernate 5.2.10 MySQL JSON 支持来映射到 Java 实体类?

标签 java mysql json hibernate jpa

我正在尝试将 MySQL JSON 列映射到 Java 实体类。寻找最干净的方法来做到这一点。

经过一些研究,发现了 3 种可能的方法:

  1. 扩展 AbstractSingleColumnStandardBasicType
  2. 创建自定义用户类型
  3. 使用属性转换器

我使用属性转换器将 JSON 列从字符串(MySQL 驱动程序将其转换为字符串)转换为我所需的类型 - 这适用于 Hibernate V4.3.10 和 V5.2.10

我尝试查找 Hibernate 是否原生支持 JSON,并发现 PR https://github.com/hibernate/hibernate-orm/pull/1395 ,基于 PR 看起来它确实添加了到 MySQL Dialect 的 JSON 映射,从而让 Hibernate 了解 JSON 列。

这是否意味着我可以使用类似的方法映射到数据库中的 JSON 列?@Column(name="json_type_column") 私有(private)对象对应的JsonAttribute;

如果我不能像这样使用它并且需要使用上述 3 种方法之一,是否有理由需要升级才能获取 registerColumnType( Types.JAVA_OBJECT, "json"); 这是 PR 的一部分,存在于 Hibernate V5.2.10 中,我能从 V5.2.10 中获得更多支持 JSON 列的功能吗?

我还研究了相应的测试用例,以了解 JSON 列映射是如何完成的 https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/test/java/org/hibernate/test/bytecode/enhancement/access/MixedAccessTestTask.java ,这里通过属性使用了@Access注解,看起来像是将Entity中对应的JSON列变量从String转换为Map后设置的。

非常感谢任何帮助。

谢谢!

最佳答案

Upon doing some research found 3 possible ways:

  • Extending AbstractSingleColumnStandardBasicType
  • Create a custom UserType
  • Use an attribute Converter

AttributeConvertor 不会帮助您,但您仍然可以使用 custom UserType ,或Hibernate Type Descriptors .

Does this mean I can use something like this to map to JSON Column in DB?

@Column(name="json_type_column")  Private Object
correspondingJsonAttribute;

没有。 json 类型仅适用于 JDBC,以便 Hibernate 在 PreparedStatement 上设置参数或获取 ResultSet 时知道如何处理该 JDBC 对象.

Do I get any more features from V5.2.10 that support JSON columns?

不需要,但您只需要提供 your own JSON type .

您可以只使用 hibernate-types可在 Maven Central 上找到。

<dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency>

并使用 Hibernate Types 提供的 JdonType,因为它适用于 MySQL、PostgreSQL、Oracle、SQL Server 或 H2,无需进行任何修改。

关于java - 如何在没有 AttributeConverter 或 customUserType 的情况下使用 Hibernate 5.2.10 MySQL JSON 支持来映射到 Java 实体类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44445417/

相关文章:

java - 一种说法 "For All Subclasses In My Project That Extend This Superclass"?

java - 在Netbean中使用unirest发送短信

java - JVM 中的字符串池

条件插入的 Mysql 查询语法

mysql - 不明确的列名查询

java - C++ 结构到 Java 类

PHP、MySQL 存储过程未按预期存储数据

android - 无法更新从 json 创建的 getstream Activity

jquery - Django JQuery 自动完成

javascript - jQuery 范围 slider grep 返回具有最小值和最大值的项目