我刚刚升级了一个库,另一个开始抛出NoSuchFieldError
。如果移除了该字段,那就没问题了。但它仍然存在。它刚刚被弃用了。
Hibernate.TIMESTAMP.nullSafeGet(null, null); // << works
new PersistentDateTime().nullSafeGet(null, null); // << throws NoSuchFieldError
nullSafeGet
方法的位置:
Hibernate.TIMESTAMP.nullSafeGet(resultSet, string);
(当然,未找到的字段是TIMESTAMP
)
该库的正确版本位于类路径上(我的手动测试也无法正常工作)
为什么会这样?
更新:我创建了一个新类,覆盖旧类,并使用完全相同的代码定义相同的方法,现在它可以正常工作。知道应该在字节码中发生什么吗?
答案 0 :(得分:4)
Joshua Bloch在他的short presentation - static final
字段中将其解释为复制到客户端库中,因此在常量更改时应重新编译。
答案 1 :(得分:1)
我唯一能想到的是PersistentDateTime()
返回某个类的实例,该类是针对不同版本的Hibernate
编译的。