让休眠保存自定义的 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 而不是字段上。