JPA eclipselink OID大对象PostgreSQL

时间:2013-01-12 22:38:43

标签: postgresql jpa netbeans primefaces eclipselink

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

  • 我想转换一个BigInteger FileUploadEvent字节和一个Bug我 难住了。

  • 认为IDE映射不正确OID会更改数据类型 to byte []并成为返回FileUploadEvent我和我的字节 给出了错误。

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

为前两个案例添加注释@ Lob并且也不起作用,我不知道我是否应用任何先前的转换或其他内容。

IDE:Netbeans 7.2

DBMS: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
    );

实体Candidato与BigInteger(Netbeans生成器)

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

public BigInteger getFoto() {
    return foto;
}

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

更改类型的实体Candidato(byte [])

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

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

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

2 个答案:

答案 0 :(得分:0)

这似乎会给hibernate用户带来一些混乱。对于大多数情况,你希望hybernate方面byte[]和PostgreSQL方面byteabytea代表“字节数组”,因此两者或多或少相同。 Byteas比lobs有更少的开销,但如果你需要一个包含搜索能力的流媒体接口,你可能想在hybernate中使用lobblob,在PostgreSQL中使用oidlob内。例如,如果您要存储流式视频,并且可能想要启动25MB的新分块请求,LOB将派上用场。

答案 1 :(得分:0)

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

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