1

我是 JPA 的新手,我的字段 PostgreSQL oid 类型(字段 foto)有问题,我试图通过 Primefaces 的 ap:fileupload 存储从接口捕获的图像并且没有成功。我已经映射了图片字段数据类型 BigInteger 的 IDE。他们尝试了以下方法:

  • 我想转换一个 BigInteger FileUploadEvent 字节和一个让我难过的 Bug。

  • 认为 IDE 被错误地映射 OID 将数据类型更改为 byte [] 并成为返回 FileUploadEvent 的字节,我给出了错误。

    [EL 警告]:01/12/2013 16:54:51.2 - ServerSession (1488263888) - 异常 [EclipseLink-3002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions。ConversionException 异常描述:对象 [94,750],属于类 [class java.lang.Long],来自映射 [org.eclipse.persistence.mappings.DirectToFieldMapping [photo -> candidato.foto]] 与描述符 [RelationalDescriptor (Entity.Candidato) -> [DatabaseTable (candidate)])],无法转换为 [class [B]。

为前两种情况添加注释@Lob,也没有工作,我不知道我是否应用了任何先前的转换或什么。

IDE:Netbeans 7.2

数据库管理系统:PostgreSQL 9.0

持久化引擎:EclipseLink 2.3.2

我希望我能帮上忙。

表 BD

CREATE TABLE candidato
    (
      idcandidato serial NOT NULL,
      idtipoidentificacion integer,
      numeroidentificacion character varying(100),
      nombres character varying(100),
      foto oid,
      n_foto character varying(50),
      CONSTRAINT candidato_pkey PRIMARY KEY (idcandidato),
    )
    WITH (
      OIDS=FALSE
    );

具有 BigInteger 的实体 Candidato(Netbeans 生成器)

@Column(name = "foto")
private BigInteger foto;

public BigInteger getFoto() {
    return foto;
}

public void setFoto(BigInteger foto) {
    this.foto = foto;
}

具有类型更改的实体候选者 (byte[])

@Column(name = "foto")
private byte[] foto;

public byte[] getFoto() {
    return foto;
}

public void setFoto(byte[] foto) {
    this.foto = foto;
}
4

2 回答 2

0

这似乎给休眠用户造成了一堆混乱。大多数情况下,您希望byte[]在 hybernate 端和byteaPostgreSQL 端。 bytea代表“字节数组”,因此两者或多或少相同。Byteas的开销比 lobs 少得多,但如果您需要一个流接口lob,包括在. 例如,如果您正在存储流式视频并且可能希望在 25MB 中启动一个新的分块请求,那么 LOB 将派上用场。bloboidlob

于 2013-04-21T02:00:10.387 回答
0

Postgres 如何返回 OID 类型?您很可能需要使用 Converter 在 Java 类型和 OID 类型之间进行转换。

见, http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm#CHDEHJEB

于 2013-04-22T13:10:33.827 回答