我的数据库的一列是一个带有非规范化ID的字符串,如"3,7,8"
。我无法改变数据库的遗留逻辑。
我目前正在使用@Converter
将字段转换为List<Integer>
,但我想做第二遍,以便实体直接定义:
@Column
@OneToMany
List<ForeignEntity>
是否有任何本地方式告诉JPA进行第二次转换以进行转换?
我知道我可以在转换器中解决,但我正在寻找一种更简洁的方法,以免我在数据转换器中使用查询,并从标准的JPA注释和机制中获利。
事实上,我的外国实体只不过是一张地图,如果有人能指出我更好的解决方案,那么我可以做得更复杂,直接解决
id | key | value
----------------
3 | A | ...
3 | B | ...
3 | C | ...
7 | A | ...
7 | B | ...
7 | C | ...
...
进入
@Column
@OneToMany
List<Map<String,String>> resolvedValues; // Contains {Map[A,B,C]{... , ..., ...}, Map[A,B,C]{... , ..., ...}, ... }
我真的很有意思!
答案 0 :(得分:0)
您可以使用JPA的javax.persistence.AttributeConverter
界面。
通过覆盖其方法:
@Override
public String convertToDatabaseColumn(ForeignEntity fe) {
.
.
.
}
这是规格 -
https://docs.oracle.com/javaee/7/api/javax/persistence/AttributeConverter.html