java - 在 Restful 客户端中检索枚举的 PostgreSQL 类型

标签 java postgresql jpa netbeans glassfish

我在 PostgreSQL 数据库的表 history 中有一个枚举类型字段 current_status。枚举定义为:

CREATE TYPE et_status AS ENUM
   ('PENDING', 'SUCCESS', 'LATE', 'EARLY', 'FAILED', 'IN_PROGRESS', 'EXPIRED');

我在服务器端添加了一个枚举类型,并在相关字段和getter和setter上对类型进行了一些修改。这看起来像:

@Entity
@Table(name = "history")
@XmlRootElement
@NamedQueries({ ... })
public class History implements Serializable {
    public enum StatusType implements Serializable
        {PENDING, SUCCESS, SUCCESS_LATE, SUCCESS_EARLY,
         FAILED, IN_PROGRESS, EXPIRED};

...

    @Lob
    @Column(name = "current_status")
    private StatusType currentStatus;

...

    public StatusType getCurrentStatus() {
        return currentStatus;
    }

    public void setCurrentStatus(StatusType currentStatus) {
        this.currentStatus = currentStatus;
    }
}

在测试网络服务时,出现以下错误:

The object [PENDING], of class [class org.postgresql.util.PGobject], from mapping
[org.eclipse.persistence.mappings.DirectToFieldMapping[currentStatus-->history.current_status]]
with descriptor [RelationalDescriptor(entities.History --> [DatabaseTable(history)])],
could not be converted to [class java.lang.Integer].

上网搜索得到this solution ,但它似乎需要使用 org.hibernate.annotations.TypeDef,我的安装中似乎没有。

问题:通过 RESTful Web 服务将 PostgreSQL 枚举类型转换为 Java 枚举类型的正确方法是什么?

数据库:PostgreSQL 8.4
应用服务器:Glassfish 3.1.2.2
集成开发环境:NetBeans 7.2
JDK: 7 更新 7

最佳答案

不要使用@Lob,请尝试使用@Enumerated(EnumType.STRING)。

但是您必须确保 java 中的名称与 postgresql 中的名称完全匹配(它们在您当前的代码中不匹配)。

关于java - 在 Restful 客户端中检索枚举的 PostgreSQL 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12900452/

相关文章:

java - ehcache xml 需要 defaultCache 元素,其他缓存正在获取 defaultCache 属性

java - 无法将源代码附加到 Maven 依赖项中的 jar 文件

postgresql - PG::Error: ERROR: function left(character varying, integer) 不存在

sql - 如何在 Postgresql 中连接两个表以更新一个表

PostgreSQL SELECT DISTINCT 复合主键

hibernate - Spring MVC 中的 JPA Hibernate 批量/批量更新

java - 如何按 Hibernate 中实体类的属性的属性进行过滤

java - 最好将jar添加到新模块或Android Studio项目的l​​ibs文件夹中

java - HTTPClient 4.1 中带有文件和字符串的多部分 POST

java - java.util.Set.addAll() 方法中的问题