2012-07-25 62 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