如何休眠访问私有字段?

时间:2009-07-11 09:50:23

标签: java hibernate reflection field private

hibernate如何访问java类的私有字段/方法,例如设置@Id?

由于

3 个答案:

答案 0 :(得分:10)

就像Crippledsmurf所说,它使用反射。请参阅Reflection: Breaking all the RulesHibernate: Preserving an Object's Contract

答案 1 :(得分:4)

尝试

import java.lang.reflect.Field;

class Test {
   private final int value;
   Test(int value) { this.value = value; }
   public String toString() { return "" + value; }
}

public class Main {
   public static void main(String... args) throws NoSuchFieldException, IllegalAccessException {
       Test test = new Test(12345);
       System.out.println("test= "+test);

       Field value = Test.class.getDeclaredField("value");
       value.setAccessible(true);
       System.out.println("test.value= "+value.get(test));
       value.set(test, 99999);
       System.out.println("test= "+test);
       System.out.println("test.value= "+value.get(test));
   }
}

打印

test= 12345
test.value= 12345
test= 99999
test.value= 99999

答案 2 :(得分:3)

猜测我会说这是通过反映目标类型并使用反射直接设置字段来完成的

我不是java程序员,但我相信java的反射支持类似于我使用的.NET