Я новичок в JPA, у меня проблема с полями типов oid PostgreSQL (поле foto), я пытаюсь сохранить изображение, полученное из интерфейса, через p:fileupload Primefaces, и мне это не удалось. IDE Я сопоставил тип данных поля изображения BigInteger. Они пробовали следующее:
Я хотел преобразовать байт BigInteger FileUploadEvent, и ошибка меня поставила в тупик.
Подумав, что в IDE был неправильно сопоставлен OID, изменил тип данных на byte[] и стал байтом, вернул мне FileUploadEvent, и я выдал ошибку.
[Предупреждение EL]: 12.01.2013 16:54:51.2 — ServerSession (1488263888) — Исключение [EclipseLink-3002] (Eclipse Persistence Services — 2.3.2.v20111125-r10461): org.eclipse.persistence. исключения . ConversionException Описание исключения: Объект [94,750] класса [class java.lang.Long] из сопоставления [org.eclipse.persistence.mappings.DirectToFieldMapping [photo -> candidato.foto]] с дескриптором [RelationalDescriptor (Entity.Candidato -> [DatabaseTable (кандидат)])], не удалось преобразовать в [класс [B].
Добавьте аннотацию @ Lob для двух предыдущих случаев, и это тоже не сработало, я не знаю, применяю ли я какое-либо предварительное преобразование или что-то в этом роде.
IDE: NetBeans 7.2
СУБД: PostgreSQL 9.0
Механизм сохраняемости: EclipseLink 2.3.2
Я надеюсь, что смогу помочь.
Таблица БД
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
);
Entity Candidato с BigInteger (генератор 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;
}
oid
для больших двоичных объектов. Используйтеbytea
. - person a_horse_with_no_name   schedule 13.01.2013bytea
ведет себя как тип данныхBLOB
в большинстве (если не во всех) других СУБД, поэтому универсальные библиотеки (например, ORM) могут справиться с этим намного лучше. Кроме того, нет необходимости в ведении хозяйства сbytea
(с oid вам нужно вручную удалить файл, на который они указывают). Если вам не нужно хранить файлы размером более 1 ГБ или вы всегда имеете доступ только к частям данных,bytea
действительно лучший выбор. - person a_horse_with_no_name   schedule 13.01.2013