Hi All,
I have 2 questions.
1) I've been playing with hibernate interceptors and I noticed that on batch statements the interceptor's onPrepareStatement gets called twice! Is this the normal behavior? If I want to register such an event only once what is the best way to do it (given a multi-threaded environment)?
2) While writing unit tests, I am extending AbstractTransactionalJUnit4SpringContextTests so as to not dirty my database with my tests, the events are fired upon session flush and issuing a roll back seems to exclude some events (mainly onCollectionUpdate for entities that didn't exist before). I tried using an in memory database and running setup scripts at the beginning but I assume this will be a PITA when the schema gets more and more complicated. Is there any other way to do this ?
I am using an EmptyInterceptor implementation that implements all onXXX methods this way:
the interceptor is attached to the session factory as follows:Code:public String onPrepareStatement(String sql) { log.trace("onPrepareStatement statement:\n"+sql); return super.onPrepareStatement(sql); }
Code:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" > <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> ... </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="entityInterceptor"> <bean class="com.mycompany.play.EmptyLoggingInterceptor"/> </property> </bean>


Reply With Quote
