mysql的json类型映射到java中的一次经历

数据库本来存的就是json类型的数据



这种情况如果想直接通过这个表所对应的实体类去查询,就需要对json对应的字段加一些注解
 

 @TableField( typeHandler = JacksonTypeHandler.class)




这样就可以了,但是我今天遇到的问题是,我确实要用这个表中的json数据,但是我是通过sql的连表查的这个数据,是左连接的这个表,主表不是这个表

这个时候查过来的数据看上去是个json类型的,但是其实他已经不是json了,而只是一个普通的String!!!!!

所以只需要这样接受就好了,我一直还以为是json,一直用map去接受···搞了我半个小时···快疯了
大伙小心

MySQL中,JSON类型用于存储键值对的数据结构,而Java Persistence API (JPA) 是一种ORM(Object-Relational Mapping)框架,它允许将数据库中的数据映射Java对象。当处理JSON类型的字段时,JPA提供了一些策略来处理。 1. **无注解映射**:对于简单的JSON数据,可以直接在实体类字段上使用`@Column(type = ColumnType.JSON)` 注解,JPA会直接将JSON字符串存入MySQL JSON字段。 ```java @Entity public class MyEntity { @Id private Long id; @Column(type = ColumnType.JSON) private String jsonData; } ``` 2. **@JsonManagedReference和@JsonBackReference**:如果涉及到复杂的关系,可以使用Jackson库提供的注解 `@JsonManagedReference` 和 `@JsonBackReference` 进行双向JSON关联。例如,有一个用户和一个地址的场景: ```java @Entity @JsonManagedReference("user") public class Address { //... } @Entity @JsonBackReference("address") public class User { //... @OneToMany(mappedBy = "user") private List<Address> addresses; } ``` 3. **自定义转换器**:如果你需要更复杂的映射逻辑,可以创建一个`JsonStringConverter` 或 `JsonbUserType` 类,实现从JSONJava对象,以及反向转换。 ```java public class CustomJsonConverter implements AttributeConverter<String, JsonNode> { // 实现转换逻辑 } ``` 然后在实体类上应用这个转换器: ```java @Entity @TypeDef(name = "json", typeClass = CustomJsonConverter.class) public class MyEntity { @Id private Long id; @Column(columnDefinition = "JSON", updatable = false, insertable = true, columnDefinitionName = "json_column") @TypeDef(name = "json") private JsonNode data; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值