Hibernate, Postgres и byte[]
От: BeerKiller  
Дата: 14.05.11 13:11
Оценка:
Доброго времени суток!

Какая-то беда с загрузкой (или сохранением?) бинарных данных — сохраняется одно, а загружается другое...

Использую Hibernate 3.6 и Postgres 9, создал для наглядности простой пример:

в hibernate.cfg.xml есть параметр:

<property name="hbm2ddl.auto">update</property>


сущность:
@Entity
@Table(name = "bytes_test")
@Proxy(lazy = false)
public class BytesTest {
    @Id
    @GenericGenerator(name = "generator", strategy = "increment")
    @GeneratedValue(generator = "generator")
    private Long id;
    
    @Column
    private byte[] bytes;

    public Long getId() {return id;}
    public void setId(Long id) {this.id = id;}
    public byte[] getBytes() {return bytes;}
    public void setBytes(byte[] bytes) {this.bytes = bytes;}
}


код:
session = HibernateUtils.getSession();
Transaction t = session.beginTransaction();
BytesTest test = new BytesTest();
test.setBytes(new byte[]{1, 2, 3, -1, -2, -3});
Serializable id = session.save(test);
t.commit();

System.out.println(Arrays.toString(((BytesTest) session.load(BytesTest.class, id)).getBytes()));

session.close();

session = HibernateUtils.getSession();
System.out.println(Arrays.toString(((BytesTest) session.load(BytesTest.class, id)).getBytes()));
session.close();


т.е. сохраняю простой массив байт: 1, 2, 3, -1, -2, -3
потом два раза загружаю его, первый раз — в той же сессии, где сохраняю, второй — в другой сессии.

вывод получается следующий:
[1, 2, 3, -1, -2, -3]
[1, 48, 50, 48, 51, 102, 102, 102, 101, 102, 100]

Т.е. если загружать из той же сессии, то все верно, но при любой другой загрузке происходят какие-то странные вещи...

длина второго загруженного массива всегда больше длины сохраненного (и первого загруженного) в два раза — 1 (ar2.length = ar1.length * 2 -1)

не понимаю что происходит. то-ли hibernate так сохраняет, то-ли postgres так хранит байты... подскажите что тут за чертовщина?

заранее благодарен!
Re: Hibernate, Postgres и byte[]
От: BeerKiller  
Дата: 14.05.11 14:24
Оценка:
я очень извиняюсь, сам дурак.

postgres с 8.4 до 9 обновил, а jdbc драйвер нет... все отлично работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.