hibernate如何访问java类的私有字段/方法,例如设置@Id?
由于
答案 0 :(得分:10)
就像Crippledsmurf所说,它使用反射。请参阅Reflection: Breaking all the Rules和Hibernate: 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