web程序还是app解决方法不一样

解决方案 »

  1.   

    看OpenSessionInView 
    百度一下OpenSessionInView <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <!-- *************************************************************************start******** -->
    <display-name>demo</display-name>
    <!-- **********************************************************************context-param*********** -->
    <!--spring配置-->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:appContext*.xml</param-value>
    </context-param>
    <!-- ***********************************************************************listener********** -->
    <!--spring配置-->
    <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
    <!-- **********************************************************************filter*********** -->
    <!-- 中文过滤器 -->
        <filter>
            <filter-name>Set Character Encoding</filter-name>
            <filter-class>com.syj.util.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>
    <!-- hibernate3 OpenSessionInView 模式 -->
    <filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>
    com.syj.util.OpenSessionInViewFilter
    </filter-class>
    </filter>
    <!--struct配置 -->
    <filter>
    <filter-name>Struts2</filter-name>
    <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
    </filter>
    <!-- **********************************************************************filter-mapping*********** -->
    <!-- 中文过滤器 -->
    <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- hibernate3 OpenSessionInView 模式 注意:一定配置struct mapping的前面-->
    <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <!--struct配置 注意:一定配置OpenSessionInView mapping的后面-->
    <filter-mapping>
    <filter-name>Struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- ************************************************************************servlet********* -->
    <!-- 负责系统初始化的启动Servlet -->
    <servlet>
    <servlet-name>initServlet</servlet-name>
    <servlet-class>com.syj.action.InitServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 配置图形码 -->
    <servlet>
    <servlet-name>codeFact</servlet-name>
    <servlet-class>com.syj.util.CodeFact</servlet-class>
    </servlet>
    <!-- jfreechart显示图表 -->
    <servlet>
    <servlet-name>DisplayChart</servlet-name>
    <servlet-class>
    org.jfree.chart.servlet.DisplayChart
    </servlet-class>
    </servlet>
    <!-- ************************************************************************servlet-mapping********* -->
    <!-- 负责系统初始化的启动Servlet -->
    <servlet-mapping>
    <servlet-name>initServlet</servlet-name>
    <url-pattern>/initServlet</url-pattern>
    </servlet-mapping>
    <!-- 配置图形码 -->
    <servlet-mapping>
    <servlet-name>codeFact</servlet-name>
    <url-pattern>/codeFact</url-pattern>
    </servlet-mapping>
    <!-- jfreechart显示图表 -->
    <servlet-mapping>
    <servlet-name>DisplayChart</servlet-name>
    <url-pattern>/servlet/DisplayChart</url-pattern>
    </servlet-mapping>
    <!-- *************************************************************************jsp-config******** -->
    <jsp-config>
    <!--syj标签库配置-->
    <taglib>
    <taglib-uri>syj.tld</taglib-uri>
    <taglib-location>/WEB-INF/syj.tld</taglib-location>
    </taglib>
    </jsp-config>
    <!-- *************************************************************************end******** -->
    </web-app>
      

  2.   

    楼上的,sessionfactory是否要手工创建
      

  3.   

    <hibernate-mapping auto-import="true" default-lazy="false">
    你再试一下
      

  4.   

    To  sunyujia:
         
    我没有太看明白您的方法:您的方法是
        ->
        <filter>
            <filter-name>OpenSessionInViewFilter</filter-name>
            <filter-class>
                com.syj.util.OpenSessionInViewFilter
            </filter-class>
        </filter>
        ->
         <filter-mapping>
            <filter-name>OpenSessionInViewFilter</filter-name>
            <url-pattern>*.do</url-pattern>
        </filter-mapping>
        那么如果用这个方法是不是还要自定义com.syj.util.OpenSessionInViewFilter类。     还有,我查到一个办法
         <filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-  class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
         </filter>
         不知道这个办法和您的有什么区别。
          我没有hibernate的基础,请您指教。
      

  5.   

    真是不好意思,呵呵,因为我改了OpenSessionInViewFilter 类,你就用org.springframework.orm.hibernate3.support.OpenSessionInViewFilter就行了,配上声明式事务,否则没有写操作的权限。
      

  6.   

    我这样的事务可以么?
    <!--用于事务--> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    <property name="sessionFactory">  
             <ref local="sessionFactory"/>  
    </property>  
    </bean> 
    <!--配置声明式事务代理工厂-->  
    <bean id="transactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
    <property name="transactionManager"> 
             <ref local="transactionManager"/> 
    </property> 
    <property name="transactionAttributes"> 
             <props> 
             <prop key="add*"> 
                    PROPAGATION_REQUIRED 
                 </prop> 
                 <prop key="*"> 
                    PROPAGATION_REQUIRED 
                 </prop> 
             </props> 
    </property> 
    </bean> 
      

  7.   

    Spring对声明事务的配置方法有2种。一个是楼主的方法。一种是用注释的方式。相对来说。注释方式更加自由。使用注释方式配置声明事务的方法在spring的referance中有详细的说明。lz可以去看下。对于spring与hibernate整合。一般会将session与事务都交给spring去处理。除非一些必须自己去控制的事务。附:注释方式配置声明事务的一个简单的例子。例子是jpa的。楼主照自己的更改。
    applicationContext中:<!-- JPA Transaction manager :JPA事务控制设置-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- TransAction Manager :文件配置声明事务管理 -->
    <!-- 
    <aop:config>
    <aop:pointcut id="crudMethods" expression="execution(* com.ssh.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="crudMethods"/>
    </aop:config> 

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="save" propagation="REQUIRED"/>
    <tx:method name="update" propagation="REQUIRED"/>
    <tx:method name="delete" propagation="REQUIRED"/>
    </tx:attributes>
    </tx:advice> 
    -->

    <!-- TransAction Manager :注释配置声明事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    在需要事务管理的类中:@Transactional(readOnly = true) //默认不使用事务
    public class XXXManager {//在需要事务控制的方法上加标注
    @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
    public XXX saveXXX(String arg) {
    ....
    }
    }
      

  8.   

    对于OpenSessionInView。不论是过滤器和拦截器都可以去实现对lazyload的session的控制。鉴于性能问题,我的做法实体层一般是不做关系。对于这个lz也可以去网上去获取一些资料。
      

  9.   

    我最近也遇到这个问题,使用OpenSessionInView 性能好点,还是不考虑表和表之间的关联,每个实体写一个独立的 Service 类 然后通过自己写HQL 来是实现 相互关联的查找,不知道哪个性能好点,哪个更快点,OpenSessionInView,意味着Session在一段时间不关闭,对性能也有影响把。
      

  10.   

    如果底层用hibernate来实现,你可以在web.xml里加上下面一段代码来控制session  
    OpenSessionInView 
    <filter>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <filter-class>
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  11.   

    补充下,上面那个web.xml的配置 是spring和hibernate结合了...如果楼主没有用spring来控制事务,完全可以自己写一个过滤器.
      

  12.   

    我想问一下单用hibernate遇到这样的情况
    又要如何解决呢
      

  13.   

    回楼上的
    http://topic.csdn.net/u/20080524/08/e0cc868a-b9ac-4085-9385-8b2cba27ce45.html