gpt4 book ai didi

java - db4o Java 8 兼容吗?

转载 作者:行者123 更新时间:2023-11-30 03:20:37 26 4
gpt4 key购买 nike

有使用 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 )。

  1. 是否可以针对 JVM 8 修复此问题(是的,我知道 db4o 已失效)?
  2. 使用什么来代替 db4o 来进行与 JVM 版本无关的序列化/反序列化?

最佳答案

快速回答:Db4o IS 兼容 Java 8。这是 hibernate 代理问题(Javassist 和动态类):(

更新 07/20/15: 不确定 db4o 在 JVM 8 下是否 100% 正确工作。我们有一个奇怪的测试用例,我们无法解释(见下文)。同时, native Java 序列化可以正常工作(但 db4o 不能)。

完整答案:如果有人需要详细信息,这个问题会出现在 Hibernate 4.3 中(在以前的版本中,一切都按预期工作)。不幸的是,我没有找到正确的解决方案。快速而肮脏的解决方法是跳过问题字段导出到 db4o(通过 transient 关键字)。

更新 07/30/15:找到解决方案(该问题出现在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com