Как создать поле ключевой строки JDO DataNucleus неизвестного размера?

Я использую реализацию JDO от DataNucleus для экземпляра базы данных H2, открытого в режиме MySQL.

Мне нужно создать элементы из трех строк в таблице. Последняя строка может быть любой длины. Я создал следующий объект, который сохраняется нормально, за исключением значений, превышающих 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 следует использовать? Как я должен объявить это? Спасибо.


person Jérôme Verstrynge    schedule 02.03.2012    source источник
comment
Я пробовал @Column(length=Integer.MAX_VALUE) и вроде бы работает, но правильно ли это?   -  person Jérôme Verstrynge    schedule 03.03.2012
comment
как вы сообщаете РСУБД, что столбец имеет неограниченную длину? КЛОБ?   -  person DataNucleus    schedule 03.03.2012


Ответы (1)


Типы столбцов VARCHAR неопределенной длины несовместимы со стандартом SQL. JDO ожидает, что он установлен. H2, кажется, позволяет вам не слишком указывать его, но, похоже, по умолчанию он имеет максимальное подписанное целое число, поэтому @Column(length=Integer.MAX_VALUE) будет правильным сопоставлением imho.

person TheArchitect    schedule 06.03.2012
comment
Я пришел к такому же выводу. CLOB — это решение, но его нельзя использовать в качестве ключа. - person Jérôme Verstrynge; 06.03.2012