Ich sah in dem Kommentar, dass Sie dies ohne Bytecode Instrumentierung erreichen möchten. Dies kann durch Implementieren der Schnittstelle FieldHandled
und durch Modifizieren der Getter und Setter für das Lazy-Feld erreicht werden.
HBM
<property name="deletable" type="true_false" lazy="true">
<formula>(select something from other tables and such....)</formula>
</property>
JAVA
import org.hibernate.bytecode.javassist.FieldHandled;
import org.hibernate.bytecode.javassist.FieldHandler;
public class Person implements FieldHandled {
/* allows lazy formulas without hibernate bytecode instrumentation */
private FieldHandler fieldHandler;
public FieldHandler getFieldHandler() { return fieldHandler; }
public void setFieldHandler(FieldHandler fieldHandler) { this.fieldHandler = fieldHandler; }
private Boolean deletable;
public void setDeletable(Boolean deletable) {
if(fieldHandler!=null)
fieldHandler.writeObject(this, "deletable", this.deletable, deletable);
this.deletable = deletable;
}
public Boolean getDeletable() {
if(fieldHandler!=null)
return (Boolean)fieldHandler.readObject(this, "deletable", deletable);
return deletable;
}
}
Ein weiteres Beispiel kann here finden. Aber das ist faul laden eine Eins-zu-Eins-Beziehung.
danke für deine antwort, was ist mit maven? Gibt es eine Möglichkeit, diese "Bytecode Instrumentierung" Sache in Maven zu erreichen? Weil ich Maven benutze und nichts mit Ameisen zu tun habe. – destan
können Sie 'maven-antrun-plugin'-Plugin verwenden, das Ant-Aufgaben innerhalb von Maven ausführen kann. Siehe: http://doginpool.blogspot.com/2012/03/bytecode-instrumentation-for-hibernate.html –
Bytecode Instrumentierung in maven: http://tricksdev.blogspot.ru/2009/03/hibernate-bytecode -instrumentation.html –