您的位置 首页 java

GitHub开源项目:使用hibernate-types映射JSON,你使用过吗?

介绍

开源 hibernate -types项目可以将Java对象或Jackson映射 JSON Node为 JPA 实体属性。

最近,又增加了对类型安全集合的支持,并将其保留为JSON。

本文将介绍如何使用JPA和Hibernate映射JSON集合。

Maven 依赖

首先,你需要在项目的 pom .xml配置文件中,设置以下Maven依赖:

如果您使用的是旧版本的Hibernate,请在hibernate-types在GitHub上获取有关当前Hibernate版本的相关信息。

领域模型

假设我们有以下Location的java对象类型。

还有一个Event实体:

@Entity(name = "Event")
@Table(name = "event")
public class Event extends BaseEntity {
@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private Location location;
@Type(
type = "jsonb",
 parameters  = {
@org.hibernate.annotations.Parameter(
name = TypeReferenceFactory.FACTORY_CLASS,
value = "com.vladmihalcea.hibernate.type.json.PostgreSQLGenericJsonBinaryTypeTest$AlternativeLocationsTypeReference"
)
}
)
@Column(columnDefinition = "jsonb")
private List<Location> alternativeLocations = new ArrayList<Location>();
//Getters and setters omitted for brevity
} 

在BaseEntity定义了一些基本特性(例如@Id,@Version)和几个常见的Hibernate的类型,其中,这里我们关注的是JsonBinaryType类型。

TypeReferenceFactory

要将Location 对象存储 在PostgreSQL类型为jsonb的列中,我们只需要使用注释来注释location属性@Type(type = “jsonb”)。但是,对于alternativeLocations集合,我们需要提供关联的Jackson,TypeReference可以从 关系数据库 中读取JSON对象时,可以重建相同类型安全的Java集合。

为此,我们需要提供完整的TypeReferenceFactory实现类,如下所示:

以上基本已经完成,接下来让我们进行测试

保存Event实体时:

Hibernate将生成以下INSERT的 SQL 语句:

另外,在取回Event实体时,可以正确获取location和alternativeLocations属性:

Event event = entityManager.find(Event.class,eventId);

以上关于这个hibernate-types开源项目映射JSON集合实例应用,很方便吧,如果在你项目框架使用了hibernate,并且相关实体需要映射JSON,试试来学习使用它吧。

文章来源:智云一二三科技

文章标题:GitHub开源项目:使用hibernate-types映射JSON,你使用过吗?

文章地址:https://www.zhihuclub.com/178592.shtml

关于作者: 智云科技

热门文章

网站地图