ユーザーは、DBbyte
の列にマップされた配列を含むエンティティの内容を変更できる必要があります。image
Sybase は LOB 機能をサポートしていないため、LOB 機能を使用できないことに注意してください。
エンティティを永続化またはマージしようとすると、データを含むエンティティのみtext/plain
が正常に保存されますが、他のタイプのファイルはDB をスローし.pdf
たり、スローしたりします。.odt
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
し、データソースの接続文字列に追加しました。無効。
Web を検索しても、関連する問題は見つかりませんでした。Sybase のサポート ページにはエラーが一覧表示されているだけで、それ以上のサポートは提供されていません。
Suse 12.2マシン上のJBoss 7.1.1で実行されているHibernate 4.0.1.Final上でSybase ASE 15.7.0、JPA 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
)
ありがとうございました。
編集: この質問は、JSF/JPA/Sybase の質問として始まりました。テストを通じて、エラーの原因として JSF を除外できるので、JSF 部分を削除しました。