Я пытаюсь получить доступ к текущей сессии спящего режима в тестовом случае, и получаю следующее сообщение об ошибке:Spring/Hibernate/JUnit - Нет Hibernate Session обязан Автор
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63) at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:574)
Я явно пропустил какое-то настройки, но не уверен, что.
Любая помощь будет принята с благодарностью. Это моя первая трещина в Hibernate/Spring и т. Д., И кривая обучения, безусловно, крутая!
код следующим образом:
Нарушитель класс:
public class DbUnitUtil extends BaseDALTest {
@Test
public void exportDtd() throws Exception
{
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Connection hsqldbConnection = session.connection();
IDatabaseConnection connection = new DatabaseConnection(hsqldbConnection);
// write DTD file
FlatDtdDataSet.write(connection.createDataSet(), new FileOutputStream("test.dtd"));
}
}
Базовый класс:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class BaseDALTest extends AbstractJUnit4SpringContextTests {
public BaseDALTest()
{
super();
}
@Resource
protected SessionFactory sessionFactory;
}
applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.hsqldb.jdbcDriver</value>
</property>
<property name="url">
<value>jdbc:hsqldb:mem:sample</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value></value>
</property>
</bean>
<bean id="sessionFactory" class="com.foo.spring.AutoAnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="entityPackages">
<list>
<value>com.sample.model</value>
</list>
</property>
<property name="schemaUpdate">
<value>true</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
</beans>
В идеале вы должны иметь @Transactional (распространение = Propagation.REQUIRED), если вы тестируете некоторые тесты dao/repository, которые сами не аннотируются транзакциями, поскольку они зависят от класса, который инициировал быть в транзакции. В @TransactionConfiguration расскажите об этом менеджеру транзакций @TransactionConfiguration (transactionManager = "transactionManager", \t \t defaultRollback = true) – vsingh
Я просто прочитал ваше сообщение, и мне удалось преодолеть эту проблему для меня. Теперь я не вижу новых строк в таблицах, хотя ошибка не возникает. Я предполагаю, что у меня есть способ остановить откат? – hephestos