我是JPA的新手,我有一个字段PostgreSQL oid类型(字段foto)的问题,我试图通过Primefaces的p:fileupload存储从接口捕获的图像,并且没有成功。IDE我已经映射了图片字段数据类型BigInteger。他们尝试了以下方法:
-
我想转换一个BigInteger FileUploadEvent字节和一个Bug我难住了。
-
认为IDE被错误的映射OID改变数据类型到byte[]并成为返回FileUploadEvent me和I的字节给出错误。
[EL Warning]: 01/12/2013 16:54:51.2 - ServerSession (1488263888) - Exception [EclipseLink-3002] (Eclipse Persistence Services)2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions。ConversionException异常描述:类[class java.lang.]的对象[94,750]。长],源自mapping [org.eclipse.persistence.mappings.]DirectToFieldMapping [photo -> candidate。[图]]与描述符[关系描述符(实体。
为前两种情况添加注释@ Lob,也不起作用,我不知道我是否应用了任何先前的转换或其他东西。
IDE: Netbeans 7.2
DBMS: PostgreSQL 9.0
持久性引擎:EclipseLink 2.3.2
希望我能帮上忙。
表BDCREATE 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的实体候选数据(Netbeans生成器)
@Column(name = "foto")
private BigInteger foto;
public BigInteger getFoto() {
return foto;
}
public void setFoto(BigInteger foto) {
this.foto = foto;
}
Entity candidate with Change of Type (byte[])
@Column(name = "foto")
private byte[] foto;
public byte[] getFoto() {
return foto;
}
public void setFoto(byte[] foto) {
this.foto = foto;
}
这似乎会给hibernate用户带来很多困惑。对于大多数情况,您希望byte[]
在混血儿端,bytea
在PostgreSQL端。bytea
代表"字节数组",因此两者或多或少相同。Byteas的开销比lobs小得多,但是如果您需要一个流接口,包括在lob
中查找的能力,您可能希望使用lob
(混合blob
和PostgreSQL中的oid
)。例如,如果您正在存储流视频,并且可能想要在25MB内启动一个新的块请求,lob将派上用场。
Postgres如何返回OID类型?您很可能需要使用Converter在Java类型和OID类型之间进行转换。
看,http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm CHDEHJEB