2012-10-15 72 views
1

我在PostgreSQL數據庫的history表中有一個枚舉類型字段current_status。枚舉定義爲:在Restful客戶端中檢索枚舉的PostgreSQL類型

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

當測試Web服務的,我得到以下錯誤:

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
應用服務器:3.1.2.2 Glassfish的
IDE:的NetBeans 7.2
JDK 7的更新7

回答

1

不要使用@Lob,嘗試@Enumerated(EnumType.STRING)代替。

但是,您必須確保java中的名稱與postgresql中的名稱完全匹配(它們不在您當前的代碼中)。

+0

謝謝。工作很好。 – andand