Я пытаюсь настроить OpenSessionInViewInterceptor весной mvc для исправления: org.hibernate.LazyInitializationException: не удалось инициализировать прокси - нет сеанса.
Ниже приведен код, который у меня уже есть, и откуда возникла ошибка.
AppConfig.java
@Configuration
@PropertySource("classpath:db.properties")
@EnableTransactionManagement
@ComponentScans(value = { @ComponentScan("com.debugger.spring.web.tests"), @ComponentScan("com.debugger.spring.web.service"), @ComponentScan("com.debugger.spring.web.dao"),
@ComponentScan("com.debugger.spring.web.controllers") })
public class AppConfig implements WebMvcConfigurer {
@Autowired
private Environment env;
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
Properties props = new Properties();
// Setting JDBC properties
...
// Setting Hibernate properties
...
// Setting C3P0 properties
...
return factoryBean;
}
@Bean
public OpenSessionInViewInterceptor openSessionInViewInterceptor() {
OpenSessionInViewInterceptor openSessionInViewInterceptor = new OpenSessionInViewInterceptor();
openSessionInViewInterceptor.setSessionFactory(getSessionFactory().getObject());
return openSessionInViewInterceptor;
}
}
featured.jsp
<c:choose>
<c:when
test='${article.user.isSubscribed() and article.user.subscription.type eq "silver" }'>
<a class="bold"
href='${pageContext.request.contextPath}/u/${article.user.username}'><span
class="silvername"> <c:out value="${article.user.name}"></c:out></span></a>
</c:when>
<c:when
test='${article.user.isSubscribed() and article.user.subscription.type eq "gold" }'>
<a class="bold"
href='${pageContext.request.contextPath}/u/${article.user.username}'><span
class="goldname"> <c:out value="${article.user.name}"></c:out></span></a>
</c:when>
<c:when
test='${article.user.isSubscribed() and article.user.subscription.type eq "premium" }'>
<a class="bold"
href='${pageContext.request.contextPath}/u/${article.user.username}'><span
class="premiumname"> <c:out
value="${article.user.name}"></c:out></span></a>
</c:when>
<c:otherwise>
<a class="bold"
href='${pageContext.request.contextPath}/u/${article.user.username}'><span>
<c:out value="${article.user.name}"></c:out>
</span></a>
</c:otherwise>
</c:choose>
$ {article.user.isSubscribeed ()} генерирует ошибку, скорее всего, потому что пользователь не может быть выбран.Я хочу, чтобы он запускался без использования активной выборки, и я думаю, что могу добиться этого, правильно настроив OpenSessionInViewInterceptor.