Persist PostgreSQL Json datatype with Hibernate

本文介绍了在PostgreSQL数据库中如何创建用于处理JSON数据的Function和Cast,并提供了一个包含JSON字段的具体表结构示例及对应的Java实体类定义。

在PG数据库中要额外创建以下Function和Cast(必须创建):

CREATE OR REPLACE FUNCTION json_intext(text) RETURNS json AS $$
SELECT json_in($1::cstring); 
$$ LANGUAGE SQL IMMUTABLE;

CREATE CAST (varchar AS json) WITH FUNCTION json_intext(text) AS IMPLICIT;

在数据库中表的sql定义

drop table if exists tabx;
create table tabx
(
	id bigint PRIMARY KEY NOT NULL,
        device_id bigint references hdata_device_info(id),
	pcie_info json,	
	sample_time timestamp
);

在entity中的类型定义(对应字段使用String类型)

@Entity
@Table(name="hdata_pcie_info")
@NamedQuery(name="HdataPcieInfo.findAll", query="SELECT h FROM HdataPcieInfo h")
public class Tabx implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	@TableGenerator(name="tabx_id_generator",
            table="id_generator",
            pkColumnName="pk_name",
            pkColumnValue="pcie_info_id",
            valueColumnName="pk_value", 
            allocationSize=1)
    
        @Id
        @GeneratedValue(strategy=GenerationType.TABLE,generator="tabx_id_generator")
	private Long id;

	@Column(name="pcie_info")
	private String pcieInfo;

	@Column(name="sample_time")
	private Timestamp sampleTime;

	//bi-directional many-to-one association to HdataDeviceInfo
	@ManyToOne
	@JoinColumn(name="device_id")
	private HdataDeviceInfo hdataDeviceInfo;
    
        //get or set method

保存json数据:

logger.debug(jsonArray.toString());
entity.setPcieInfo(jsonArray.toString());			
//String json = "{\"username\":\"john\",\"posts\":121,\"emailaddress\":\"john@nowhere.com\"}";
//entity.setPcieInfo(json)

转载于:https://my.oschina.net/liuyuanyuangogo/blog/1359274

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值