SQL Server 2008, JDO (Datanucleus 3.0.7) и максимальная длина столбца - PullRequest
1 голос
/ 13 февраля 2012

Я использую SQL Server 2008, и на моем пути к классам находятся следующие jar-файлы:

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), но не повезло.

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

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

1 Ответ

0 голосов
/ 14 февраля 2012

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

.
...