Я перехожу с DB2 на PostgreSQL.В результате я получил следующий DDL в PostgreSQL:
CREATE TABLE binResTable (
idField DECIMAL(15) NOT NULL,
checksumField DECIMAL(15) DEFAULT 0 NOT NULL,
blobField bytea NOT NULL DEFAULT E'\\000'
);
Мое отображение Hiberante (файл XML) выглядит следующим образом:
BinaryResource.hbm.xml
<hibernate-mapping>
<class name="BinaryResource" table="binResTable" lazy="true">
<id name="id" type="long" column="idField" />
<property name="checksum" type="long" column="checksumField" lazy="true" />
<property name="bytes" type="BinaryBlobType" column="blobField" lazy="true" />
</class>
</hibernate-mapping>
Вот класс Java для сопоставления:
public class BinaryResource implements Serializable {
private long id;
private BinaryDocument document;
private byte[] bytes;
private long checksum;
...
Для поля BLOB-объектов я использую следующий тип пользователя:
import java.io.Serializable;
import java.sql.Blob;
import java.sql.Types;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.usertype.UserType;
public class BinaryBlobType implements UserType {
public int[] sqlTypes() {
return new int[] { Types.BLOB };
}
public Class<byte[]> returnedClass() {
return byte[].class;
}
...
Чтение данных работало нормально, но когда я хочу вставить запись в таблицу "binResTable", я получаю следующую ошибку:
ERROR: column "blobField" is of type bytea but expression is of type bigint
Как мне нужно отобразить поле байта в Hibernate?