package net.jforum.core.support.hibernate; import java.io.Serializable; import net.jforum.core.exceptions.ForumException; import org.hibernate.EmptyInterceptor; import org.hibernate.EntityMode; import org.hibernate.SessionFactory; import org.springframework.context.ApplicationContext; /** * @author Rafael Steil */ public class SpringInterceptor extends EmptyInterceptor { private final SessionFactory sessionFactory; private final ApplicationContext beanRegistry; public SpringInterceptor(ApplicationContext beanRegistry, SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; this.beanRegistry = beanRegistry; } @Override public Object instantiate(String entityName, EntityMode entityMode, Serializable id) { if (!EntityMode.POJO.equals(entityMode)) { return null; } Class<?> c = getClassByName(entityName); Object instance = this.beanRegistry.getBean(c); sessionFactory.getClassMetadata(c).setIdentifier(instance, id, EntityMode.POJO); return instance; } private Class<?> getClassByName(String name) { try { return Class.forName(name); } catch (ClassNotFoundException e) { throw new ForumException(e); } } }