Пользователь должен иметь возможность изменять содержимое объекта, содержащего массив byte
, отображаемый в столбце image
в БД. Обратите внимание, что я не могу использовать функции LOB, так как Sybase не поддерживает его.Невозможно сохранить двоичные файлы с помощью JPA и Sybase ASE
Когда при попытке упорствовать или объединить объект, только объекты, содержащие text/plain
данные хранятся обычно, в то время как файлы других типов, таких как .pdf
или .odt
сделать DB бросок:
java.sql.SQLException: JZ0SM: jConnect could not execute a stored procedure because there was a problem sending the parameter(s). This problem was likely caused because the server does not support a specific datatype, or because jConnect did not request support for that datatype at connect time.
Try setting the JCONNECT_VERSION connection property to a higher value. Or, if possible, try sending your procedure execution command as a language statement.
Hibernate регистрирует нормальный обновление сразу перед исключением, и я определенно не выполняю никаких хранимых процедур, поэтому я не уверен, в какой хранимой процедуре относится ошибка. Я пробовал то же самое с родными запросами, но с той же ошибкой.
16:08:04,776 INFO Hibernate: update KVS_MIPO_DOWNLOAD_FILE set creatorName=?, data=?, referencePeriod=? where id=?
Я проверил версию моего драйвера jconn4
и добавил JCONNECT_VERSION=7.0
мою строку подключения в источнике данных. Нет эффекта.
Поиск в Интернете не дал никаких связанных проблем. Страница поддержки Sybase просто перечисляет erorr и не предлагает никакой дополнительной помощи.
Я использую Sybase ASE 15.7.0, JPA 2 over Hibernate 4.0.1.Final, работающий на JBoss 7.1.1 на машине Suse 12.2.
Субъект:
@Entity
@DiscriminatorValue("file")
@Table(name = "KVS_MIPO_DOWNLOAD_FILE")
public class DownloadFile extends DownloadResource {
@Column(nullable = false)
private String creatorName;
@Basic(fetch = FetchType.LAZY)
private byte[] data = new byte[0];
private String referencePeriod;
...
public byte[] getData() {
if (data != null) {
return data.clone();
}
return new byte[0];
}
public void setData(final byte[] data) {
if (data == null) {
this.data = null;
return;
}
this.data = data.clone();
}
В таблице DDL:
create table KVS_MIPO_DOWNLOAD_FILE (
referencePeriod varchar(255) null ,
creatorName varchar(255) not null ,
id int not null ,
data image null
)
Спасибо.
EDIT: этот вопрос начался как вопрос JSF/JPA/Sybase. Через тесты я могу исключить JSF в качестве источника ошибки, поэтому я удалил части JSF.