栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Hibernate和JPA持久化JSON对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Hibernate和JPA持久化JSON对象

这是一个非常常见的要求,因此我决定写一篇非常详细的文章,介绍使用JPA和Hibernate时映射JSON列类型的最佳方法。

Maven依赖

您需要做的第一件事是在项目配置文件中设置以下Hibernate
Types
Maven依赖项

pom.xml

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

领域模型

假设您具有以下实体:

@Entity(name = "Book")@Table(name = "book")@TypeDef(    typeClass = JsonBinaryType.class,     defaultForType = JsonNode.class)public class Book {    @Id    @GeneratedValue    private Long id;    @NaturalId    private String isbn;    @Column(columnDefinition = "jsonb")    private JsonNode properties;    //Getters and setters omitted for brevity}

请注意,

@TypeDef
用来指示Hibernate
JsonNode
使用
JsonBinaryType
Hibernate
Types项目提供的内容来映射对象。

测试时间

现在,如果您保存实体:

Book book = new Book();book.setIsbn( "978-9730228236" );book.setProperties(    JacksonUtil.toJsonNode(        "{" +        "   "title": "High-Performance Java Persistence"," +        "   "author": "Vlad Mihalcea"," +        "   "publisher": "Amazon"," +        "   "price": 44.99" +        "}"    ));entityManager.persist( book );

Hibernate将生成以下SQL语句:

INSERT INTO    book (    isbn,     properties,     id) VALUES(    '978-9730228236',     '{"title":"High-Performance Java Persistence","author":"Vlad Mihalcea","publisher":"Amazon","price":44.99}',      1)

您还可以将其加载回并修改它:

Session session = entityManager.unwrap( Session.class );Book book = session    .bySimpleNaturalId( Book.class )    .load( "978-9730228236" );LOGGER.info( "Book details: {}", book.getProperties() );book.setProperties(    JacksonUtil.toJsonNode(        "{" +        "   "title": "High-Performance Java Persistence"," +        "   "author": "Vlad Mihalcea"," +        "   "publisher": "Amazon"," +        "   "price": 44.99," +        "   "url": "https://www.amazon.com/High-Performance-Java-Persistence-Vlad-Mihalcea/dp/973022823X/"" +        "}"    ));

Hibernate

UPDATe
为您处理以下声明:

SELECT  b.id AS id1_0_FROM    book bWHERe   b.isbn = '978-9730228236'SELECt  b.id AS id1_0_0_ ,        b.isbn AS isbn2_0_0_ ,        b.properties AS properti3_0_0_FROM    book bWHERe   b.id = 1-- Book details: {"price":44.99,"title":"High-Performance Java Persistence","author":"Vlad Mihalcea","publisher":"Amazon"}UPDATE    book SET    properties = '{"title":"High-Performance Java Persistence","author":"Vlad Mihalcea","publisher":"Amazon","price":44.99,"url":"https://www.amazon.com/High-Performance-Java-Persistence-Vlad-Mihalcea/dp/973022823X/"}'WHERe    id = 1


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426588.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号