Привет У меня возникла следующая проблема при запуске теста junit.
org.hibernate.HibernateException: No Session found for current thread
at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:881)
at com.user.dao.UserDaoHibernateImpl.getUserByName(UserDaoHibernateImpl.java:40)
at com.user.service.UserServiceImpl.getUserName(UserServiceImpl.java:67)
Моя версия:
hibernate 4.0.0 CR7, пружина 3.1, калитка CR2 1.5.3
@TransactionConfiguration(transactionManager = "test.transactionManager")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext-test.xml"})
public class AccountPageTestCase extends AbstractTransactionalJUnit4SpringContextTests
{
private WicketTester tester;
@Test
public void signInUserMustGoToAccountPage() {
this.tester.startPage(AccountPage.class, new PageParameters());
final FormTester formTester = this.tester.newFormTester(AuthenticatedTestApplication.SIGN_IN_FORM_PATH);
formTester.setValue("username", AccountPageTestCase.TEST_USER);
formTester.setValue("password", AccountPageTestCase.TEST_USER);
formTester.setValue("rememberMeRow:rememberMe", false);
formTester.submit();
this.tester.assertRenderedPage(AccountPage.class);
this.tester.clickLink("accountBody:" + AuthenticatedTestApplication.SIGN_OUT_PANEL_PATH);
}
}
Я добавил здесь tx: аннотацию, управляемую аннотациями.
<tx:annotation-driven transaction-manager="test.transactionManager" />
<bean id="test.transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager"
autowire="byType" />
Итак, мой код getUserByName
@Override
@Transactional(propagation = Propagation.SUPPORTS,
readOnly = true)
public User getUserByName(final String displayName) {
return this.userDao.getUserByName(displayName);
}
Конструктор моей учетной записи.
@SpringBean(name = "userService")
private transient UserService userService;
public AccountPage(final PageParameters pageParameters) {
final String userName = pageParameters.get("name").toString(StringUtils.EMPTY);
final User user = this.userService.getUserByName(userName);
}
инъекция работает, но настройки транзакции не работают.
Что не так?что было бы лучшим способом решить проблему.Я предпочитаю не использовать шаблон гибернации и придерживаться неинвазивного подхода гибернации.
Моему тесту spring + hibernate не удалось найти сессию для текущего потока, но если я использую wicket tester, я получаю проблему.