我是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;
}
答案 0 :(得分:0)
这似乎会给hibernate用户带来一些混乱。对于大多数情况,你希望hybernate方面byte[]
和PostgreSQL方面bytea
。 bytea
代表“字节数组”,因此两者或多或少相同。 Byteas比lobs有更少的开销,但如果你需要一个包含搜索能力的流媒体接口,你可能想在hybernate中使用lob
(blob
,在PostgreSQL中使用oid
在lob
内。例如,如果您要存储流式视频,并且可能想要启动25MB的新分块请求,LOB将派上用场。
答案 1 :(得分:0)
Postgres如何返回OID类型?您很可能需要使用Converter在Java类型和OID类型之间进行转换。
请参阅, http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm#CHDEHJEB