【问题标题】:JPA Postgres insert Bit(4) with default valueJPA Postgres 使用默认值插入 Bit(4)
【发布时间】:2012-07-23 22:26:57
【问题描述】:

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

在我的 To 对象中:

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

在数据库中: 掩码位(4) DEFAULT B'1000'::"bit",

当我想压住物体时:

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

我尝试在 TO 课上: - 布尔值 - 位集(4) - 细绳 - 整数 - 字符

我尝试使用 BitSet,这些: 反对: @Column(name = "掩码") 私有位集掩码;

     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”的服务器类型没有,而且他们的名字相同只是巧合,那么事情应该会更清楚。”

【问题讨论】:

    标签: postgresql jpa-2.0 eclipselink


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果我尝试使用字符串,我会在休眠中找到解决方案,它使用@tpye。错误:列“掩码”是位类型,但表达式是字符串类型
    猜你喜欢
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2013-01-14
    • 2013-09-24
    • 2013-05-19
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多