使休眠保存自定义的 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"
    }
}
mmp634174342 回答:使休眠保存自定义的 cgproxy 值

如果需要,您将不得不使用属性访问而不是字段访问。这意味着,您将所有注释放在 getter 而不是字段上。

本文链接:https://www.f2er.com/312684.html

大家都在问