The Dozer Wicket Hibernate model is a Wicket IModel implementation to wrap a Hibernate object and keeping its changed values for several requests (instead of a simple LDM which re-loads a object from the database when re-attaching). To avoid serializing Hibernate proxies the model detaches any unintialized Hibernate proxies (they are replaced with custom HibernateProxy
instances) that are re-attached when invoking a method on the proxy again, already initialized Hibernate proxies are deproxied.
The model also supports non-Hibernate objects, when detaching such an object it will check it for any references to Hibernate objects and detach them.
Multiple Hibernate factories for different databased are also supported, the SessionFinder
interface is given the current object class as type. Based on this type the correct Hibernate session can be returned by the user.
In the onDetach
of the model the object tree is traversed, when a Hibernate proxy is encountered its checked if it is initialized, if so the object is deproxied. When an object is unintialized a Javassit proxy is generated and put in place of the original value. When the proxy gets invoked its original value is attached using internal Hibernate API's and our 'own' proxy is replaced by the Hibernate proxy.
- Java 7
- Wicket 1.5.x
- Hibernate 4.1.x (only 4.1.x supported since it uses internal Hibernate API's for re-attaching, for 3.6.x see other branch)
- Spring (a Spring bean implementing the
SessionFinder
interface to get access to the Hibernate session, injected usingwicket-spring
)
DozerModel
for a normal modelDozerListModel
list model version (maintains a list ofDozerModel
objects)