SQL Server 2008, JDO (Datanucleus 3.0.7) и максимальная длина столбца

Я использую SQL Server 2008, и в моем пути к классам находятся следующие банки:

datanucleus-api-jdo-3.0.6.jar
datanucleus-core-3.0.8.jar 
datanucleus-enhancer-3.0.1.jar 
datanucleus-rdbms-3.0.7.jar

Начну с того, что все работает нормально.

Я успешно сохраняю объект, который имеет поле String, которое должно содержать содержимое файла ASCII.

Когда файл больше, я получаю эту ошибку при сохранении:

javax.jdo.JDOFatalUserException: попытка сохранить значение «|0|1,00|1,00|1,00||EUR |8010312090196||ADVBANMMGM8|BA MASTER MGM 8|0|1,00|1,00|1,00||EUR» в столбце «FILECONTENT», который имеет максимальную длину 256. Пожалуйста, исправьте свои данные!

Для ясности я обрезал содержимое файла между кавычками.

Это мой файл package.jdo:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jdo PUBLIC
    "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"
    "http://java.sun.com/dtd/jdo_2_0.dtd">
<jdo>
    <package name="com.mypackage.mycompany.model">

            <class name="FeedEvent" table="MY_UPLOADS" identity-type="application" >
                    <field name="id" persistence-modifier="persistent" primary-   key="true" value-strategy="identity" />
                    <field name="fileName" persistence-modifier="persistent" />
                    <field name="fileSize" persistence-modifier="persistent" />
                    <field name="fileContent" persistence-modifier="persistent"  />
                    <field name="uploaded" persistence-modifier="persistent" />
                    <field name="uploadDate" persistence-modifier="persistent" />
                    <field name="uploadFailureReason" persistence-modifier="persistent" />
                    <field name="eventDate" persistence-modifier="persistent" />
            </class>


    </package>
</jdo>

Из кода Windows все работает нормально, и мы можем хранить файлы размером до 1 МБ, поэтому я думаю, что это не связано с типом БД.

Это мой POJO:

public class FeedEvent {

private Long id;
private String fileName;
private long fileSize;
private String fileContent;
private boolean uploaded;
private Date uploadDate;
private String uploadFailureReason;
private Date eventDate;

public FeedEvent() {
}

.......getters and setters here..............

}

Поле fileContent вызывает проблемы при загрузке содержимого файла ASCII. Я попытался переключить тип столбца на nvarchar(max), text, varchar(max), но безуспешно.

Любое предложение будет принято с благодарностью.

Спасибо за ваше время.


person Thomas Ukenagashi    schedule 13.02.2012    source источник


Ответы (1)


Я предпочитаю не оставлять все на «удачу». Спецификация JDO имеет четко определенные способы установки длины столбца; ссылаясь на любую книгу JDO или документацию для DataNucleus, вы достаточно ясно расскажете об элементе XML <column>, а также скажете вам, что persistence-modifier="persistent" не требуется для подавляющего большинства типов полей Java.

person DataNucleus    schedule 14.02.2012
comment
теперь работает добавление атрибута длины к тегу столбца внутри поля fileContent. //Спасибо - person Thomas Ukenagashi; 14.02.2012