![](/img/trans.png)
[英]How to map a MySQL JSON column to a Java entity property using JPA and Hibernate
[英]How to use Hibernate 5.2.10 MySQL JSON support without AttributeConverter or customUserType to map to Java Entity Class?
我正在尝试将 MySQL JSON 列映射到 Java 实体类。 寻找最干净的方法来做到这一点。
经过一些研究,发现了 3 种可能的方法:
我使用属性转换器将 JSON 列从字符串(因为 MySQL 驱动程序将其转换为字符串)转换为我需要的类型 - 这适用于 Hibernate V4.3.10 和 V5.2.10
我试图找出 Hibernate 是否原生支持 JSON 并找到了 PR https://github.com/hibernate/hibernate-orm/pull/1395 ,基于 PR 看起来它确实将 JSON 映射添加到 MySQL 方言,因此让Hibernate 了解 JSON 列。
这是否意味着我可以使用这样的东西来映射到 DB 中的 JSON 列? @Column(name="json_type_column") Private Object correspondingJsonAttribute;
如果我不能像这样使用它并且需要使用上述 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 注释,看起来它在从字符串转换后将实体中相应的JSON列变量设置为映射。
非常感谢任何帮助。
谢谢!
经过一些研究,发现了 3 种可能的方法:
- 扩展 AbstractSingleColumnStandardBasicType
- 创建自定义用户类型
- 使用属性转换器
AttributeConvertor
不会为此提供帮助,但您仍然可以使用自定义UserType
或Hibernate Type Descriptors 。
这是否意味着我可以使用这样的东西来映射到 DB 中的 JSON 列?
@Column(name="json_type_column") Private Object correspondingJsonAttribute;
不。 json
类型仅用于 JDBC,因此 Hibernate 知道在PreparedStatement
上设置参数或获取ResultSet
时如何处理该 JDBC 对象。
我是否从 V5.2.10 中获得了更多支持 JSON 列的特性?
不,但您只需要提供您自己的 JSON 类型。
您可以只使用 Maven Central 上提供的hibernate-types
。
<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 上运行而无需进行任何修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.