相关疑难解决方法(0)

byte []的正确hibernate注释

我有一个使用hibernate 3.1和JPA注释的应用程序.它有一些具有byte []属性的对象(1k - 200k大小).它使用JPA @Lob注释,而hibernate 3.1可以在所有主要数据库上读取这些内容 - 它似乎隐藏了JDBC Blob供应商的特性(应该这样做).

@Entity
public class ConfigAttribute {
  @Lob
  public byte[] getValueBuffer() {
    return m_valueBuffer;
  }
}
Run Code Online (Sandbox Code Playgroud)

我们不得不升级到3.5,当我们发现hibernate 3.5 在postgresql中打破(并且不会修复)这个注释组合时(没有解决方法).到目前为止我还没有找到明确的解决方法,但我注意到如果我只是删除了@Lob,它使用了postgresql类型的bytea(有效,但只适用于postgres).

annotation                   postgres     oracle      works on
-------------------------------------------------------------
byte[] + @Lob                oid          blob        oracle
byte[]                       bytea        raw(255)    postgresql
byte[] + @Type(PBA)          oid          blob        oracle
byte[] + @Type(BT)           bytea        blob        postgresql

once you use @Type, @Lob seems to not be relevant
note: oracle seems to have deprecated the "raw" type since 8i.
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来拥有一个可以在主要数据库之间移植的带注释的类(具有blob属性).

  • 注释byte …

java database postgresql hibernate blob

110
推荐指数
5
解决办法
9万
查看次数

接缝文件上传到postgres bytea列"列是bytea但表达式是bigint类型"

紧跟这个例子,我正在上传一个小文件并尝试存储到postgresql bytea列中.

这是错误(前两个输出是在尝试INSERT之前输出bean属性的日志语句:

SAGE 1 - action.registration.LetterTemplateHome - 内容类型:text/xml

SAGE 1 - action.registration.LetterTemplateHome - letterTemplateText:[B @ 48c7aaef

SAGE 1 - action.registration.LetterTemplateHome - 内容为字符串:xml version ="1.0"encoding ="UTF-8"standalone ="yes".... etc

SAGE 1 - org.hibernate.util.JDBCExceptionReporter - 批量输入0插入letter_template(content_type,file_name_template,fileSize,letter_template_name,letter_template_text,letter_template_id)值('text/xml','letterDate.xml','0',' yu','37078','202')已中止.调用getNextException以查看原因.

SAGE 1 - org.hibernate.util.JDBCExceptionReporter - 错误:列"letter_template_text"的类型为bytea但表达式的类型为bigint提示:您需要重写或转换表达式.位置:162

这里是如何在bean中定义字段:

    private byte[] letterTemplateText;

@Lob
@Column(name = "letter_template_text")
@Basic(fetch = FetchType.LAZY)
public byte[] getLetterTemplateText() {
    return this.letterTemplateText;
}

public void setLetterTemplateText(byte[] letterTemplateText) {
    this.letterTemplateText = letterTemplateText;
}
Run Code Online (Sandbox Code Playgroud)

postgresql seam

6
推荐指数
3
解决办法
1万
查看次数

标签 统计

postgresql ×2

blob ×1

database ×1

hibernate ×1

java ×1

seam ×1