我已经使用JPA 2.1Converter
将PostgreSQL转换hstore
为Map<String, String>
。但是我没有找到针对EclipseLink和Hibernate等不同JPA提供程序的通用方法。因此,我需要为每个JPA提供程序编写不同的Converter。
以下是为EclipseLink和Hibernate使用不同转换器的示例。https://github.com/phstudy/jpa-converter-sample
是否有针对不同JPA提供者的通用方法?
PostgreSQL JDBC驱动程序提供了org.postgresql.util.HStoreConverter
具有to / fromString
和byte[]
转换功能的实用程序类。您可以使用它来实现自己的JPA 2.1 Converter
:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.util.Map;
import org.postgresql.util.HStoreConverter;
@Converter
public class MyHStoreConverter implements AttributeConverter<Map<String, String>, String> {
@Override
public String convertToDatabaseColumn(Map<String, String> attribute) {
return HStoreConverter.toString(attribute);
}
@Override
public Map<String, String> convertToEntityAttribute(String dbData) {
return HStoreConverter.fromString(dbData);
}
}
然后,将其与Convert
实体中的JPA注释一起使用:
@Entity
public class MyEntity {
@Convert(converter = MyHStoreConverter.class)
private Map<String, String> hstoreAttribute;
}
这是仅使用JPA标准的实现,因此应与JPA提供者无关。但是,较早之前,Hibernate错误HHH-8804阻止了使用Converter
映射到泛型,但是Hibernate 5.0.0和4.3.11中已解决了该问题。Map<>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句