У меня есть класс Image, в котором есть byte[] для хранения фактических данных изображения. Я могу загрузить и вставить изображение в свое веб-приложение. Когда я пытаюсь отобразить изображение после его чтения из JPA, длина моего byte[] всегда равна 2x-1 или 2x-2, где x — длина поля bytea в postgres 9. Очевидно, что браузер не будет отображать изображение говорит, что оно повреждено. Мне не помешала бы помощь в выяснении, почему я получаю (примерно) в два раза больше, чем ожидаю. Вот сопоставление моего класса изображений. Использование eclipselink с JPA 2 для запуска postgres 9 на Mac.
Когда я выбираю из базы данных с помощью
select *, length(bytes) from image;
Я получаю длину 9765. В точке останова в моем контроллере длина byte[] равна 19529, что на один байт меньше, чем в два раза, что в базе данных.
@Entity
@Table( name = "image" )
@SequenceGenerator( name = "IMAGE_SEQ_GEN", sequenceName = "IMAGE_SEQUENCE" )
public class Image
extends DataObjectAbstract<Long>
{
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "IMAGE_SEQ_GEN" )
private Long key;
@Column( name="content_type" )
private String contentType;
@Lob
@Basic( optional=false )
@Column( name="bytes" )
private byte[] bytes;
// constructor and getters and setters
}
pgadmin показывает мне следующее для таблицы изображений
CREATE TABLE image
(
"key" bigint NOT NULL,
bytes bytea,
content_type character varying(255),
"version" integer,
CONSTRAINT image_pkey PRIMARY KEY (key)
)
WITH (
OIDS=FALSE
);