NoSuchFieldError但字段在那里

时间:2011-04-07 19:38:42

标签: java hibernate

我刚刚升级了一个库,另一个开始抛出NoSuchFieldError。如果移除了该字段,那就没问题了。但它仍然存在。它刚刚被弃用了。

Hibernate.TIMESTAMP.nullSafeGet(null, null); // << works

new PersistentDateTime().nullSafeGet(null, null); // << throws NoSuchFieldError

nullSafeGet方法的位置:

Hibernate.TIMESTAMP.nullSafeGet(resultSet, string); 

(当然,未找到的字段是TIMESTAMP

该库的正确版本位于类路径上(我的手动测试也无法正常工作)

为什么会这样?

更新:我创建了一个新类,覆盖旧类,并使用完全相同的代码定义相同的方法,现在它可以正常工作。知道应该在字节码中发生什么吗?

2 个答案:

答案 0 :(得分:4)

Joshua Bloch在他的short presentation - static final字段中将其解释为复制到客户端库中,因此在常量更改时应重新编译。

答案 1 :(得分:1)

我唯一能想到的是PersistentDateTime()返回某个类的实例,该类是针对不同版本的Hibernate编译的。