こんにちは私は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)
私のバージョン:
hibernate4.0.0CR7スプリング3.1CR2ウィケット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:annotation-drivenを追加しました。
<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テストでは、現在のスレッドのセッションが見つかりませんが、ウィケットテスターを使用すると問題が発生します。