2012-07-25 59 views
1

我有Postgres DB,Java和JPA 2.0以及eclipseLink。JPA Postgres插入位(4),默認值爲

在我要反對:

 @Column(name = "mask") 
    private Boolean mask; 

以dB爲單位: 屏蔽位(4)DEFAULT B'1000' :: 「位」,

當我想presist對象:

引起者:org.postgresql.util.PSQLException:錯誤:列「掩碼」是類型位,但表達式的類型爲布爾型 提示:您將需要重寫或轉換表達式。

我嘗試在上課: - 布爾 - 位集合(4) - 字符串 - 整數 - 字符

隨着BitSet中我嘗試這些: 反對: @Column(NAME =「掩碼「) 私有BitSet掩碼;

 public BitSet getMask() { 
     BitSet work = new BitSet(4);   
     work.set(0); 
     if (mask == null){ 
      return work; 
     } 
     return mask; 
    } 

    public void setMask(BitSet mask) { 
     BitSet work = new BitSet(4);   
     work.set(0); 
     if (mask== null) { 
     this.mask= work; 
     } else { 
     this.mask= mask; 
     } 
    } 

我該如何讓它工作?

布爾方法不好,存儲1位。 我在谷歌搜索,失去了論壇。

5小時谷歌搜索後,我發現: http://archives.postgresql.org/pgsql-bugs/2005-05/msg00014.php

它大約一個Postgres BUG:

「說完稱爲JDBC類型‘位’,實際上映射到一個布爾類型是非常混亂。如果你認爲JDBC的BIT有沒有什麼與稱爲「bit」的服務器類型有關,並且它們只是一個巧合,它們具有相同的名稱,那麼事情應該更清楚。

回答

1

如果您通過原始JDBC訪問您的字段返回哪種類型?

你試過把它映射爲一個String,會發生什麼錯誤? 您可能需要使用@Converter來轉換類型。

見, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters/Converter

+0

如果我嘗試串,我發現在休眠的解決方案,itű1s使用@tpye。錯誤:列「掩碼」是類型位,但表達式是字符串類型 – Joseph 2012-08-01 09:28:20