- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 Spring 3.0.1、Struts 2.0、Hibernate 3.3.2 和 Apache Tiles 的 Web 应用程序,我想引入 OpenSessionInView 模式。我已经在 web.xml 文件中添加了过滤器,但我不知道下一步该怎么做。
Web.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<display-name>
Struts2Hibernate3Spring3Tile2Integration
</display-name>
<welcome-file-list>
<welcome-file>articles.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>
org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
</param-name>
<param-value>/WEB-INF/tiles-def.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.apache.struts2.tiles.StrutsTilesListener
</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Filtre pour OpenSessionInView -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ApplicationContext.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- On demande à Spring de gérer l’ensemble des classes package ma.ecommerce -->
<context:component-scan base-package="ma.ecommerce" />
<!-- Pour accéder aux paramètres définis dans le fichier database.properties -->
<context:property-placeholder location="classpath:database.properties" />
<tx:annotation-driven transaction-manager="hibernateTransactionManager" />
<!-- La définition du bean sessionFactory en utilisant Spring ORM et Hibernate -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>ma.ecommerce.service.modele.Article</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
</props>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${database.driver}"></property>
<property name="url" value="${database.url}"></property>
<property name="username" value="${database.user}"></property>
<property name="password" value="${database.password}"></property>
</bean>
<bean id="hibernateTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="article" class="ma.ecommerce.presentation.action.ArticleAction" />
<bean id="articleBean" class="ma.ecommerce.domaine.ArticleBean" />
<bean id="articleDao" class="ma.ecommerce.dao.DaoImpl"/>
DaoImpl.java 文件
@Repository("articleDao")
public class DaoImpl implements IDao
{
@Autowired
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void saveArticle(Article article)
{
sessionFactory.getCurrentSession().saveOrUpdate(article);
}
@SuppressWarnings("unchecked")
@Override
public List<Article> getArticleList()
{
return (List<Article>)sessionFactory.getCurrentSession().createCriteria(Article.class).list();
}
最佳答案
似乎唯一缺少的是在渲染 View 后提交并关闭 session 。也许你可以用过滤器来做到这一点:
https://developer.jboss.org/wiki/OpenSessionInView
但是,如果您确实想使用“在 View 中打开 session ”(反)模式,则应该三思而后行。乍一看,这听起来像是一个避免 LazyLoadingExceptions 的简单解决方案,但您应该意识到它带来的惩罚:
也许您可以找出真正需要哪些字段,并在服务层内准备一个投影/DTO,并将其传播到 View 。这将释放数据库并封装数据的更改。
问题来了,你真的需要访问 View 中的数据库吗?
关于java - OpenSessionInView 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662183/
我有一个使用 Spring 3.0.1、Struts 2.0、Hibernate 3.3.2 和 Apache Tiles 的 Web 应用程序,我想引入 OpenSessionInView 模式。我
最近在做架构Hibernate/JPA/Spring/Zk,因为要学很多框架,所以这几天问题越来越多。 我有一个问题让我困惑了好几天。 我听说“模式”OpenSessionInView 使 Hiber
我有一个带有 Vehicle DTO 的 Vehicle 实体。 我将 OpenSessionInView 与 Stripes 一起使用。 在我的 Stripes action bean 中,我需要生
我正在开发一个 Spring Hibernate Web 应用程序 早些时候,我只使用 dispatcher-servlet.xml 加载 Spring 配置,而没有使用 ContextLoaderL
我在 web.xml 中有 openSessionInView 过滤器。 openSessionInView org.springframework.orm.hibernate3.s
我将 OpenSessionInView 与 DWR 结合使用来为我的 ajax 请求获取一个 hibernate session 。当我开始部署 war 时这工作正常,但是当我尝试使用 run-ap
有谁知道 Database.com Java SDK 是否具有与 Hibernate 的 OpenSessionInView 等效的功能(或者有人创建了自己的)? 在引用我的惰性关系时,我的 JSP
我是一名优秀的程序员,十分优秀!