有一个使用db4o的附带项目。它不适用于JVM 8(用于反序列化获取Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field com.xxx.yyy.version to com.db4o.reflect.generic.GenericObject)。
发布于 2015-07-16 16:14:32
快速回答: Db4o兼容Java8。它是hibernate代理问题(Db4o和动态类) :(
更新07/20/15:不确定db4o是否100%正确地在JVM 8下工作。我们有一个奇怪的测试用例,我们无法解释(见下文)。同时,本机Java序列化工作正常(但db4o不工作)。
完整答案:如果有人需要详细信息,这个问题出现在Hibernate 4.3中(在以前的版本中,一切都如预期的那样工作)。不幸的是,我没有找到正确的解决办法。快速和肮脏的解决方法是跳过问题字段,从导出到db4o (通过transient关键字)。
更新07/30/15:找到了解决方案(问题出现在1.8中):
ProxyFactory.nameGenerator = new JavassitBackwardCompatibleNamingGenerator();
public class JavassitBackwardCompatibleNamingGenerator implements UniqueName{
private static int counter = 0;
@Override
public String get(String classname) {
return classname + "_$$_javassist_" + counter++;
}
}https://stackoverflow.com/questions/31427859
复制相似问题