指定要在JPA实体而不是类中使用的转换器的特定示例

kxe2p93d  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(94)

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

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

字符串
并且JsonConverter是smth,如:

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

}


我想做的是给这个转换器添加一些构造函数,用一些类型(可能是状态)初始化它,然后用它进行jpa转换。
那么,是否可以使用@Convert注解(或其他注解)而不是指定class来指定某个特定的转换器示例呢?
我希望能够做到这一点,因为在不同的实体中,我可以有不同的json字段,比如实体数组或集合,或者smth else,所以我不想编写单独的转换器来覆盖所有情况,因为代码对于所有情况都是相同的,它们的区别只是泛型类型和一些在转换之前应该在内部初始化的字段。

6l7fqoea

6l7fqoea1#

您可以通过为实体编写一个抽象类SomeAbstractClass并实现equalhashcode方法来实现这一点。它还可以具有存储状态的属性。现在您的具体实现SomeClass1可以实现这个抽象类并添加更多细节。

public SomeClass1 extends SomeAbstractClass {
}

public SomeClass2 extends SomeAbstractClass {
}

字符串
现在对于Converter类(实现AttributeConverter

@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
        }
    }
}

相关问题