我正在尝试将 MySQL JSON 列映射到 Java 实体类。寻找最干净的方法来做到这一点。
经过一些研究,发现了 3 种可能的方法:
- 扩展 AbstractSingleColumnStandardBasicType
- 创建自定义用户类型
- 使用属性转换器
我使用属性转换器将 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/