Как hibernate может получить доступ к частному полю/методу класса java, например, чтобы установить @Id?Как можно спящий доступ к закрытому полю?
Благодаря
Как hibernate может получить доступ к частному полю/методу класса java, например, чтобы установить @Id?Как можно спящий доступ к закрытому полю?
Благодаря
Как говорит Crippledsmurf, он использует отражение. См. Reflection: Breaking all the Rules и Hibernate: Preserving an Object's Contract.
В догадке я бы сказал, что это будет сделано за счет отражения от типа цели и настройки полей непосредственно с помощью отражения
Я не ява программист, но я считаю, Java поддерживает отражение подобное к .NET, который я использую
Попробуйте
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