2016-06-21 39 views
4

Ich verwende Hiberante 5 und Spring 4.2.3. Ich finde den Weg nicht, einen EventListener dem SessionFactory-Bereich hinzuzufügen. Ich muss nur ein Datum festlegen, bevor der Ruhezustand ein Objekt bestehen bleibt. Ich habe session in spring.xml definiertEventListener Hibernate 5

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="mappingResources"> 
      <list> 
       <value>com/hibernate/mapping/User.hbm.xml</value> 
       <value>com/hibernate/mapping/PublicKey.hbm.xml</value> 
       <value>com/hibernate/mapping/File.hbm.xml</value> 
       <value>com/hibernate/mapping/Url.hbm.xml</value> 
       <value>com/hibernate/mapping/Role.hbm.xml</value> 
       <value>com/hibernate/mapping/Operation.hbm.xml</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">validate</prop> 
       <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop> 
       <prop key="hibernate.c3p0.min_size">5</prop> 
       <prop key="hibernate.c3p0.max_size">50</prop> 
       <prop key="hibernate.c3p0.timeout">100</prop> 
       <prop key="hibernate.c3p0.max_statements">50</prop> 
       <prop key="hibernate.c3p0.idle_test_period">3000</prop> 
       <prop key="hibernate.c3p0.validate">true</prop> 
      </props> 
     </property> 
    </bean> 

Und ich habe meine GenericDAOImpl, wo eine dieser session erhalten:

public abstract class GenericDAOImpl <T, PK extends Serializable> implements GenericDAO<T, PK> { 

    private SessionFactory sessionFactory; 

    /** Domain class the DAO instance will be responsible for */ 
    protected Class<T> type; 

    @SuppressWarnings("unchecked") 
    public GenericDAOImpl() { 
     Type t = getClass().getGenericSuperclass(); 
     ParameterizedType pt = (ParameterizedType) t; 
     type = (Class<T>) pt.getActualTypeArguments()[0]; 
    } 

    @SuppressWarnings("unchecked") 
    public PK create(T o) { 
     return (PK) getSession().save(o); 
    } 

    public T read(PK id) { 
     return (T) getSession().get(type, id); 
    } 

    public void update(T o) { 
     getSession().update(o); 
    } 

    public void delete(T o) { 
     getSession().delete(o); 
    } 

    @SuppressWarnings("unchecked") 
    public List<T> getAll() { 
     return getSession().createCriteria(type).list(); 
    } 

    protected Session getSession() { 
     return sessionFactory.getCurrentSession(); 
    } 

     // getters and setters 
} 

ich mehrere Möglichkeiten gesehen haben, es zu tun, aber einige von ihnen nicht funktioniert für Hiberante 5 (Wie ein Integrator). Und ich kann nicht den Weg finden, dies zu einem EventListener über XML hinzuzufügen oder einfach den Code im Bereich sessionFactory hinzuzufügen. Ich habe gefunden, wie zum Sitzungsumfang mit sessionFactory.withOptions().eventListeners(listeners);

hinzugefügt werden Danke!

+0

Haben Sie versucht, mit Interceptor? http://docs.jboss.org/hibernate/core/3.3/reference/en/html/events.html –

+0

@ MarcoA.Hernandez Ich habe diese Möglichkeit vor eventListener versucht, aber ich habe nicht den Weg gefunden, den Interceptor hinzuzufügen SessionFactory über XML. Ich weiß, dass mit Code ist so einfach wie 'new Configuration(). SetInterceptor (new AuditInterceptor())'. Aber ich habe meine sessionFactory in XML definiert. – angeldev

+0

Nie probiert, aber ich nehme an, dass Sie eine Klasse erstellen können, die org.springframework.orm.hibernate5.LocalSessionFactoryBean erweitert, Configuration() .setInterceptor (...) im Konstruktor hinzufügt und sie dann in der XML-Konfigurationsdatei verwendet. –

Antwort

0

Schließlich wurde so einfach, finde ich einen Weg über xml einen Abfangjäger hinzuzufügen, gerade hinzufügen:

<property name="entityInterceptor"> 
    <bean class="com.xxx.xxx.className"></bean> 
</property> 

Ich fand dies in der Post: Hibernate Interceptor Not Working

Verwandte Themen