所以我需要为实体使用我自己的 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"
}
}