使用带有连接ID的字符串列值作为JPA中的外键

时间:2016-09-05 09:17:46

标签: java hibernate jpa

我的数据库的一列是一个带有非规范化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]{... , ..., ...}, ... }

我真的很有意思!

1 个答案:

答案 0 :(得分:0)

您可以使用JPA的javax.persistence.AttributeConverter界面。

通过覆盖其方法:

@Override
 public String convertToDatabaseColumn(ForeignEntity fe) {
.
.
.
}

这是规格 -

  

https://docs.oracle.com/javaee/7/api/javax/persistence/AttributeConverter.html