PostgreSQL,enum,JPA,EclipseLink

时间:2013-02-13 16:56:47

标签: postgresql jpa enums eclipselink

我想知道如何使用JPA Java enum和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;

但我收到例外:

  

引起:org.postgresql.util.PSQLException:ERREUR:la colonne«langage»est de type pretoria.langage mais l'expression est de type character varying     Indice:Vousdevezréécrirel'表达ou lui appliquer une transformation de type。

我认为我可以使用ObjectTypeConverter作为show here

成功

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

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

1 个答案:

答案 0 :(得分:1)

看来你在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
    ...
);

我希望它有所帮助。

<强>&GT;&GT;修改

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