指定转换器的特定实例以在 JPA 实体中使用而不是 class

Specify particular instance of converter to use in JPA entity instead of class

我有一些 jpa 实体存储在数据库中,它有一个字段包含 json 中的一些数据,例如。

@Convert(converter = JsonConverter.class)
public SomeClass entities;

JsonConverter是这样的:

@Converter(autoApply = true)
public class JsonListConverter implements AttributeConverter<T, String> {

}

我想做的是给这个转换器添加一些构造函数,用某种类型(可能是状态)初始化它,然后用它进行 jpa 转换。

那么是否可以使用 @Convert 注释(或其他注释)而不是指定 class 来指定转换器的某些特定实例?

我希望能够做到这一点,因为在不同的实体中我可以有不同的 json 字段,比如实体数组或集合,或者其他的,所以我不想编写单独的转换器来涵盖所有情况,因为它们的代码都是相同的,它们仅在泛型和一些在转换之前应该在内部初始化的字段上有所不同。

您可以通过为您的实体编写一个摘要 class SomeAbstractClass 来实现这一点,并且已经实现了 equal 和 hashcode 方法。它还可以有 属性 来存储状态。现在你的具体实现 SomeClass1 可以实现这个抽象 class 并添加更多细节。

public SomeClass1 extends SomeAbstractClass{
}

public SomeClass2 extends SomeAbstractClass{
}

转换器现在 class

@Converter(autoApply = true)
public class JsonListConverter implements AttributeConverter<SomeAbstractClass, String> {
@override
public String convertToDatabaseColumn(SomeAbstractClass sac){
// Your implementation goes here
}
@override
public SomeAbstractClass convertToEntityAttribute(String s){

    //check to find if s can be SomeClass1
    if(checkSomeClass1(s)){ 
 // return an instance of SomeClass1
}
    else{
// return an instance of SomeClass2
}


}
}