Доброго времени суток!
Какая-то беда с загрузкой (или сохранением?) бинарных данных — сохраняется одно, а загружается другое...
Использую 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 так хранит байты... подскажите что тут за чертовщина?
заранее благодарен!
я очень извиняюсь, сам дурак.
postgres с 8.4 до 9 обновил, а jdbc драйвер нет... все отлично работает