PostgreSQL、枚举、JPA、EclipseLink

标签 postgresql jpa enums eclipselink

我想知道如何映射 JPA Java 枚举和 PostgreSQL 枚举类型?

在 PostgreSQL 端我创建了这个类型:

CREATE TYPE langage AS ENUM ('FR', 'EN', 'DE');

我有一个 Java 枚举:

public enum LangageEnum {   
   FR,
   EN,
   DE;
}

我的 JPA 实体字段是这个:

@Enumerated(EnumType.STRING)
@Column(name="langage")
private LangageEnum langage = LangageEnum.FR;

但我收到异常:

Caused by: org.postgresql.util.PSQLException: ERREUR: la colonne « langage » est de type pretoria.langage mais l'expression est de type character varying Indice : Vous devez réécrire l'expression ou lui appliquer une transformation de type.

我想我可以成功使用 ObjectTypeConverter 显示 here

但是 ObjectTypeConverter 是一个 EclipseLink 注释,而不是 JPA 所以我正在寻找另一种方法来做到这一点。

那么,我怎样才能将 Java 枚举映射到 PostgreSQL 枚举呢?

最佳答案

看起来你在Postgres中创建了一个枚举类型,但是表中的字段呢?

这对我有用:

枚举

public enum CampaignState
{
    READY,
    RUNNING,
    PAUSED,
    FINISHED;
}

实体

...
@NotNull
@Enumerated(EnumType.STRING)
private CampaignState state = CampaignState.READY;
...

表格

CREATE TABLE campaign
(
    id UUID PRIMARY KEY,
    ...
    state CHARACTER VARYING(64) NOT NULL, -- defined by application
    ...
);

希望对你有帮助。

>> 编辑

根据您的评论,请查看此 answer .

关于PostgreSQL、枚举、JPA、EclipseLink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14858783/

相关文章:

java - 如何在 hibernate 中使用枚举作为值来注释 EnumMap?

php - 在 laravel 中检查这个吗?

java - 在每个 jvm 运行中添加 jar 文件似乎不起作用

java - JPA持久化: Automatical remove of not existing referenced entity from list

java - 如何使用查询从存储库读取实体的特定变量?

JPA : @SequenceGenerator is not generating the sequence

c++ - 数组枚举和输入

sql - 为什么这个查询不使用我创建的索引?

postgresql - 将数据库记录写入 postgres 时运行 shell 脚本

sql - 当多个函数使用它时如何改变复合类型?