我正在使用一个遗留数据库,该数据库经常使用存储为文本的 JSON 块。我正在尝试编写一些 JPA 类,这些类将隐藏此实现细节,使其更易于使用数据库,并允许我们将来重构数据库模式。我目前的做法是:
class MyTableObject{
@Lob
@Column(name = "stuff")
private String jsonString;
public List<Stuff> getStuff(){
return jsonToStuff(jsonString);
}
public setStuff(List<Stuff> stuff){
jsonString = stuffToJsonString(stuff);
}
}
在这里,表示在数据库和对象中总是作为 JSON 字符串,虽然它可以工作(到目前为止),但它的效率非常低,因为每次修改对象的状态时都必须解析 JSON。我很感激我可以通过在内存中缓存 Stuff 对象来提高当前解决方案的性能,但是我仍然必须在每次调用 setter 时将它们序列化为 JSON,并确保状态的 2 表示(对象和 JSON)是始终同步。我想做的是告诉框架在进出时转换我的字段,例如:
class MyTableObject{
private List<Stuff> stuff;
@Lob
@Column(name = "stuff")
public String getStuffAsJsonString(){
return stuffToJsonString(stuff);
}
@Column(name = "stuff")
public setStuffFromJsonString(String jsonString){
stuff = stuffFromJsonString(jsonString);
}
}
但是,据我所知,注释仅在 getter 上有效。我可以实现上述目标 - 在对象中使用一种表示形式,在数据库中使用不同的表示形式吗?我是 JPA 的新手,所以我很容易遗漏一些明显的东西。
提前谢谢了