如何解决使休眠保存自定义的 cgproxy 值
所以我需要为实体使用我自己的 cglib 代理。问题是,当我将它保存到数据库中时,所有值都为空,即使我希望 hibernate 使用 getter 获取值 - 这将通过来自原始实体的代理获取它们。 但它似乎以其他方式获取值。我的问题是,如何增强代理或更新休眠配置以保存原始值?毕竟它用自己的代理做同样的事情,所以必须有某种方式。下面是一个例子:
class Something {
private String name;
private String description;
// constructor,getters,setters
}
class Foo {
public Something create() {
Something something = new Something("some name","some description");
return (Something) Enhancer.create(Something.class,new Handler(something));
}
class Handler implements MethodInterceptor {
private final Something original;
@Override
public Object intercept(Object o,Method method,Object[] objects,MethodProxy methodProxy) throws Throwable {
// do some clever stuff
return method.invoke(original,objects);
}
}
}
class DbHandler {
// Autowired or...
private SomethingRespository somethingRespository;
public void handle(Foo foo) {
Something proxy = foo.create();
somethingRepository.save(proxy); // saves null,null instead of "some name","some description"
}
}
解决方法
如果需要,您将不得不使用属性访问而不是字段访问。这意味着,您将所有注释放在 getter 而不是字段上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。