Wie kann Hibernate auf ein privates Feld/eine Methode einer Java-Klasse zugreifen, um beispielsweise die @Id festzulegen?Wie kann der Ruhezustand auf ein privates Feld zugreifen?
Dank
Wie kann Hibernate auf ein privates Feld/eine Methode einer Java-Klasse zugreifen, um beispielsweise die @Id festzulegen?Wie kann der Ruhezustand auf ein privates Feld zugreifen?
Dank
Wie Crippledsmurf sagt, es verwendet Reflexion. Siehe Reflection: Breaking all the Rules und Hibernate: Preserving an Object's Contract.
Bei einer Vermutung würde ich sagen, dass dies durch die Reflexion über den Zieltyp und Einstellung der Felder direkt mit Reflexion
Ich bin kein Java-Programmierer getan, aber ich glaube, Java-ähnliche Reflexion Unterstützung hat zu dem von .NET, die ich verwende
Versuchen
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));
}
}
druckt
test= 12345
test.value= 12345
test= 99999
test.value= 99999