当前位置: 首页 > 知识库问答 >
问题:

是否有一种将PostgreSQL hstore转换为JPA2.1DataType的优雅而常见的方法?

微生弘
2023-03-14

我使用JPA2.1转换器将PostgreSQLhstore转换为map 。但是对于不同的JPA提供者,比如EclipseLink和Hibernate,我没有找到一个通用的方法。所以我需要为每个JPA提供者编写不同的转换器。

下面的示例为EclipseLink和Hibernate使用不同的转换器。https://github.com/phstudy/jpa-converter-sample

对于不同的JPA提供者,是否有一种通用的方法?

共有1个答案

艾晋
2023-03-14

PostgreSQL JDBC驱动程序提供了一个org.postgreql.util.hstoreConverter实用工具类,具有to/from字符串字节[]转换。您可以使用它来实现您自己的JPA2.1转换器:

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);
    }
}

然后,将其与实体中的JPAconvert注释一起使用:

@Entity
public class MyEntity {
    @Convert(converter = MyHStoreConverter.class)
    private Map<String, String> hstoreAttribute;
}

这是一个只使用JPA标准的实现,因此应该与JPA提供者无关。但是,使用转换器映射到一般的映射<>之前已经被Hibernate bug HHH-8804阻止了,但是在Hibernate 5.0.0和4.3.11中已经修复了这个问题。

 类似资料:
  • 问题内容: 一个激励人的例子: 实施各种调度“策略”,对“作业”列表进行排序。 一种非常简单的策略是首先执行最短的作业(不考虑其权重/优先级)。 嗯,这种策略只不过是对job.length进行排序,因此让我们使用sort包。定义一个自定义类型,并实现sort.Interface … 好了,现在回到我们的简单策略… 嗯… 问题答案: 首先, 即使您使用like ,也看不到任何定义 。 我认为您的意思

  • 问题内容: 我已经使用JPA 2.1 将PostgreSQL转换为。但是我没有找到针对EclipseLink和Hibernate等不同JPA提供程序的通用方法。因此,我需要为每个JPA提供程序编写不同的Converter。 以下是为EclipseLink和Hibernate使用不同转换器的示例。 https://github.com/phstudy/jpa- converter-sample 不同

  • 问题内容: 这是当前使用的代码。 问题答案: 依赖DOM Level3加载/保存:

  • 问题内容: 我在Java方面苦苦挣扎,但无法将Java .wav转换为.mp3转换器的有效示例。该转换器将在Java applet中使用,因此它应仅依赖以纯Java编写的库,而无需底层C代码调用。 谁能提供一个完整的示例? 谢谢 问题答案: 阅读您的wave文件@ http://java.sun.com/javase/technologies/desktop/media/jmf/ 并编码为mp3

  • 有没有办法使用 或类似的方法将筛选器数组应用于对象数组? 现在,我有这个: 更优雅的解决方案如下: 当然,上面的示例无法编译,因为<code>reduce,而不是<code>LongStream。我很好奇上面的代码是否可以写在一行中? (P.S .先说清楚,这意在成为Java 8如何工作的问题,而不是风格的问题。我同意一行代码的可读性不如循环代码。)

  • 我必须使用Java将com.google.mlkit.vision.common.inputimage转换为android中等效的位图图像。现在我正在使用下面的代码。 上面的代码没有将输入转换为位图。谁能给我建议一下把输入转换成位图的有效方法。