Как hibernate может получить доступ к закрытому полю / методу java-класса, например, для установки @Id?
Спасибо
Как говорит Crippledsmurf, он использует отражение. См. Отражение: нарушение всех правил и Спящий режим: сохранение контракта объекта .
Попробуйте
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
В предположении я бы сказал, что это делается путем отражения типа цели и установки полей непосредственно с помощью отражения
Я не программист Java, но я считаю, что в Java есть поддержка отражений, аналогичная .NET, которую я использую