让休眠保存自定义的 cgproxy 值
make hibernate save custom made cgproxy values
所以我需要为实体使用我自己的 cglib 代理。问题是,当我将它保存到数据库中时,所有值都为空,即使我希望休眠获取带有 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 而不是字段上。
所以我需要为实体使用我自己的 cglib 代理。问题是,当我将它保存到数据库中时,所有值都为空,即使我希望休眠获取带有 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 而不是字段上。