【发布时间】:2010-12-02 12:42:33
【问题描述】:
我在两个不同的机器上使用 Hibernate 3.6,它们都从完全相同的数据库表中读取。两个字段的Hibernate注解是这样的:
@Basic(fetch=FetchType.EAGER)
@Column(name="encryptedkey",length = 256)
protected byte[] encryptedKey;
@Basic(fetch=FetchType.EAGER)
@Column(name="encryptediv",length = 256)
protected byte[] encryptedIV;
现在,当在一台机器(带有 Sun JDK 1.6.0_22-b04 的 Ubuntu Linux)上加载具有这些属性的实体时,我能够加载 256 字节的加密密钥和 IV。
但是,在另一台机器(带有 Sun JVM 1.6.0_22-b04 的 Windows 2003 服务器 SP2 企业版)上情况并非如此,我为每个字段加载了 0 或 511 个字节。否则,两个系统上的jar文件都是一样的。
数据库引擎是 PostgreSQL 9.0,我使用的是最新的 PostgreSQL JDBC 驱动程序。
有人知道可能出了什么问题吗?
【问题讨论】:
-
postgre 的列类型是数组?
-
postgre中的类型是
bytea -
尝试了一些故障排除步骤:升级 JVM,升级 Hibernate 1.6 库,降级到 Hibernate 3.3.2,从 infinispan 更改为 ehcache。我还尝试使用 JDBC3 和 JDBC4 驱动程序,结果相同。这些事情都没有改变任何东西。
-
我会尝试在调试器中运行它,并在处理这些的 Hibernate 类型实现的 nullSafeGet() 方法中设置断点...看看从 JDBC 驱动程序返回的内容是否正常或不是,所以您至少可以判断它是 Hibernate 还是 JDBC 驱动程序问题。您可能还会发现正在使用的类型不是您期望或想要的。
-
也许这应该是一个答案?但它并没有真正回答任何问题......
标签: java hibernate postgresql