具有使用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
时)。
是否可以为JVM 8修复它(是的,我知道db4o已死)?
使用什么代替db4o来进行JVM版本无关的序列化/反序列化?
最佳答案
快速回答:
符合db4o IS的Java8。这是休眠代理问题(Javassist和动态类):(
更新07/20/15:不确定db4o是否100%在JVM 8下正确运行。我们有一个奇怪的测试用例,无法解释(请参阅下文)。同时,本机Java序列化可以正常工作(但db4o不能)。
完整答案:
如果有人需要详细信息,则此问题会出现在Hibernate 4.3中(在以前的版本中,一切正常。不幸的是,我没有找到正确的解决方案。快速而肮脏的解决方法是跳过问题字段(通过transient
关键字)导出到db4o。
15年7月30日更新:找到了解决方案(问题出现在Javassist 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++;
}
}
关于java - db4o Java 8兼容吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31427859/