当前位置: 首页 > 知识库问答 >
问题:

无法使用JPA和赛贝斯ASE存储二进制文件

浦修文
2023-03-14

用户应该能够更改包含字节数组的实体的内容,该数组映射到数据库中的图像列。请注意,我不能使用LOB功能,因为赛贝斯不支持它。

当我试图持久化或合并实体时,通常只存储包含文本/普通数据的实体,而存储其他类型的文件,如。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添加到数据源中的连接字符串中。没有效果。

在网上搜索没有产生任何相关问题。赛贝斯支持页面只是列出了erorr,没有提供进一步的帮助。

我使用赛贝斯ASE 15.7.0,JPA 2超过Hibernate 4.0.1。最后,运行在Suse 12.2机器上的JBoss 7.1.1上。

实体:

@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部分。

共有1个答案

杜砚
2023-03-14

结果表明,错误的原因是jConnect 7.0版本中的一个错误。我已经更新到7.07,问题已经解决。

 类似资料:
  • 全部的 这个标题几乎说明了一切。我在这里查看,但找不到任何有关模式的信息。 有人能帮我照个灯吗? 我知道MS SQL Server使用“schema.name”来引用数据库中的表,但对于Sybase我不确定。 蒂娅! 编辑: 我想我应该更具体一点。 我知道在MS SQL Server中可以修改表所有者,但您仍然可以通过“从sysobjects so、sysusers su、sys.tables t

  • 我在赛贝斯ASE 15.5中使用赛贝斯Central工具创建了几个表。我已经将列定义为主键(int数据类型),不知何故,该列也变成了标识。 现在,从赛贝斯中心,我无法从该列中删除标识,即使该表或任何引用的表中没有数据。 有人能帮忙吗?我不想使用Set IDENTITY_INSERT,我想从本专栏中完全删除标识行为。 谢啦

  • 我四处搜索,找到了一些有用的程序,例如: 但没人能帮我。我需要获得有关CPU、RAM、OS等的信息。有什么工具或程序可以帮助我吗?

  • 如何在Sybase ASE 15表格设置中删除列。 我尝试了一些,但没有用: 以及查看Sybase文档,它没有为我的问题提供解决方案。 数据库my_db未启用选择进入数据库选项。无法执行带有数据副本的ALTER TABLE。设置选择进入数据库选项并重新运行。

  • Support for the Sybase database. The following table summarizes current support levels for database release versions. 数据库接口支持 The following dialect/DBAPI options are available. Please refer to individ

  • 似乎 WITH 仅在 Sybase SQL Anywhere 中受支持:http://dcx.sybase.com/1100/en/dbusage_en11/commontblexpr-s-5414852.html …但不在Sybase ASE中:( 有人可以建议Sybase ASE中是否存在等效的构造吗?还有其他方法可以实现东西而不是使用 WITH,但我们计划重新调整一些动态生成的 SQL 的用