java - 如何将作为对象的 Java 类属性映射到单个 JPA 表列?
问题描述
我有一个使用 JPA 映射到底层 SQL 数据库的 Sprint Boot Web 服务。
其中一个域类有一个属性,它是一个复杂的 Java 对象,我不想与普通的映射/连接表一起保留它。相反,我想将此 Java 对象映射到主表中的单个列,并理想地将数据以 JSON 格式存储在字符串列中。
有什么建议么?
解决方案
您可以使用 jpa 的AttributeConverter:
@Converter
public class MyObjectConverter implements AttributeConverter<MyObject, String> {
@Override
public String convertToDatabaseColumn(MyObject myObject) {
//convert myobject to json: for instance use ObjectMapper from Jackson
if( myObject == null )
return null;
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(myObject );
}
@Override
public MyObject convertToEntityAttribute(String myObjectString) {
// convert myObjectString back to object
if( myObjectString== null )
return null;
ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(myObjectString, MyObject.class);
}
}
并在您的实体中使用它作为..
@Column
@Converter(converter = MyObjectConverter.class)
MyObject myObject;
推荐阅读
- postgresql - docker compose psql:错误:致命:角色“postgres”不存在
- kotlin - GCM 加密内置 MAC 检查失败
- html - 字体真棒图标和文本未对齐
- blockchain - 我可以更改已部署智能合约的锁定期吗?
- python - Selenium 无法发现打开的页面
- c# - RaspberryPi 蓝牙文件应用程序总是要求在 iOS 上配对
- text - SwiftUI - 设置 maxHeight 对 LazyVGrid() 中的 Text() 没有任何作用
- ffmpeg - 将单个 mp4 文件转换为 ts 会产生意外的播放
- swift - Swift UI 堆叠边框视图一致的边框粗细
- jpa - 具有嵌入式 Id 和 m:n 关系对象的 Spring 数据存储库