1

我有 Postgres DB、Java with JPA 2.0 和 eclipseLink。

在我的 To 对象中:

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

在 DB: 掩码位 (4) 默认 B'1000'::"位",

当我想保留对象时:

原因:org.postgresql.util.PSQLException:错误:列“掩码”是位类型,但表达式是布尔类型提示:您将需要重写或强制转换表达式。

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

我尝试使用 BitSet,这些: TO object: @Column(name = "mask") private BitSet mask;

     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:

“拥有一个名为“BIT”的 JDBC 类型实际上映射到一个布尔类型是非常令人困惑的。如果您假设 JDBC 的 BIT与名为“bit”的服务器类型无关,并且它们具有同名,那事情应该就清楚了。”

4

1 回答 1

1

如果您通过原始 JDBC 访问您的字段,则返回什么类型?

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

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

于 2012-07-31T14:41:51.810 回答