JPA Postgres使用默认值插入Bit(4)

时间:2012-07-25 13:16:46

标签: postgresql jpa-2.0 eclipselink

我有Postgres DB,带有JPA 2.0的Java和eclipseLink。

在我的To对象中:

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

IN DB:            掩码位(4)DEFAULT B'1000'::“bit”,

当我想要预先确定对象时:

引起:org.postgresql.util.PSQLException:错误:列“mask”的类型为bit,但expression的类型为boolean 提示:您需要重写或转换表达式。

我在TO课中尝试: - 布尔值 - BitSet(4) - 字符串 - 整数 - Char

使用BitSet我试试,这些: 反对:          @Column(name =“mask”)          私有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位。 我在google搜索,丢失了论坛。

谷歌搜索5小时后,我发现: http://archives.postgresql.org/pgsql-bugs/2005-05/msg00014.php

关于postgres BUG:

“实际映射到单个布尔类型的JDBC类型称为”BIT“非常令人困惑。如果您认为JDBC的BIT没有没有与名为”bit“的服务器类型,并且只是巧合,他们有相同的名字,那么事情应该更清楚。“

1 个答案:

答案 0 :(得分:1)

如果通过原始JDBC访问您的字段,将返回哪种类型?

您是否尝试将其映射为String,发生了什么错误? 您可能需要使用@Converter来转换类型。

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