【问题标题】:How to create a JDO DataNucleus key string field of unknown size?如何创建未知大小的 JDO DataNucleus 密钥字符串字段?
【发布时间】:2012-03-02 21:14:47
【问题描述】:

我在一个以 MySQL 模式打开的 H2 数据库实例上使用 DataNucleus 的 JDO 实现。

我需要在一个表中创建由三个字符串组成的项目。最后一个字符串可以是任意长度。我创建了以下对象,除了大于 256 个字符的值之外,它仍然很好。 DataNucleus 自动将大小限制设置为 256:

@PersistenceCapable(objectIdClass=RawItemKey.class)
@Index(name="BEGIN_IDX", members={"prefix", "language", "value"})
public class RawBeginItem {

    @PrimaryKey
    @Column(length=40)
    private String prefix = "";

    @PrimaryKey
    @Column(length=2)
    private String language = "";

    @PrimaryKey
    @Column(jdbcType="VARCHAR")
    private String value = "";    

    public RawBeginItem() {

    }

    public RawBeginItem(String prefix, String language, String value) {

        this.prefix = prefix;
        this.language = language;
        this.value = value;

    }

    ...

}

我如何告诉 JDO 第三个字段是任意长度的字符串?我应该使用哪种 SQL 类型?我该如何申报?谢谢。

【问题讨论】:

  • 我已经尝试过@Column(length=Integer.MAX_VALUE) 并且它似乎有效,但这是正确的方法吗?
  • 如何告诉 RDBMS 列是无限长度的? CLOB ?

标签: java mysql string datanucleus


【解决方案1】:

未指定长度的VARCHAR 列类型与SQL 标准不兼容。 JDO 期望设置一个。 H2 似乎不允许您过多指定一个,但它似乎默认为最大带符号整数,因此 @Column(length=Integer.MAX_VALUE) 将是正确的映射恕我直言。

【讨论】:

  • 我得出了同样的结论。 CLOB 是一种解决方案,但不能用作键。
猜你喜欢
  • 1970-01-01
  • 2020-12-16
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多