我是 JPA 的新手,我遇到了 PostgreSQL oid 类型字段(字段照片)的问题,我试图通过 Primefaces 的 p:fileupload 存储从界面捕获的图像,但没有成功。我已经映射了图片字段数据类型 BigInteger 的 IDE。 他们尝试了以下方法:
我想转换一个 BigInteger FileUploadEvent 字节和一个 Bug me 难倒了。
认为是IDE错误映射了OID改变了数据类型 到字节 [] 并成为字节返回 FileUploadEvent 我和我 给出了错误。
[EL 警告]:01/12/2013 16:54:51.2 - ServerSession (1488263888) - 异常 [EclipseLink-3002](Eclipse 持久性服务 - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions 。转换异常 异常描述:对象 [94,750],属于类 [class java.lang.Long],来自映射 [org.eclipse.persistence.mappings.DirectToFieldMapping [photo -> candidato.foto]] 和描述符 [RelationalDescriptor (Entity.Candidato -> [DatabaseTable (candidate)])],无法转换为 [class [B]。
前两种情况加了注解@Lob也没用,不知道是不是应用了之前的转换之类的。
集成环境: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;
}
最佳答案
这似乎给休眠用户带来了很多困惑。对于大多数情况,您希望在 hybernate 端使用 byte[]
,在 PostgreSQL 端使用 bytea
。 bytea
代表“字节数组”,因此两者或多或少是相同的。 Byteas 的开销比 lob 少很多,但如果您需要需要一个流媒体接口(interface),包括在 lob
中搜索的能力。例如,如果您正在存储流媒体视频并且可能想要启动一个 25MB 的新分块请求,那么 LOB 会派上用场。
关于postgresql - JPA eclipselink OID 大对象 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14298694/