ssh整合hibernatetemplate不允许写的问题

struts2,hibernate5,spring4整合,以前没有遇到过,整整搞了一天了没找出原因,哪位大神帮帮忙:
页面Struts提示的错误信息如下:
错误信息
spring的beans.xml里是这么配置的

<bean id="sessionfactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="packagesToScan">
            <value>cn.itcast.oa.domain</value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                <!-- org.hibernate.dialect.OracleDialect -->
                    org.hibernate.dialect.MySQL5Dialect
                </prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="cache.use_query_cache">true</prop>
                <prop key="cache.use_second_level_cache">true</prop>
                <prop key="cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</prop>
            </props>
        </property>
    </bean>  
<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionfactory" />
    </bean>
    <tx:advice id="tad" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="find*" read-only="true" />
            <tx:method name="save*" propagation="REQUIRED" />
            <tx:method name="update*" propagation="REQUIRED" />
            <tx:method name="delete*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <aop:pointcut expression="execution(* cn.itcast.oa.service.impl.*.*(..))" id="service1" />
        <aop:advisor advice-ref="tad" pointcut-ref="service1" />
    </aop:config>
    <bean name="template" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="sessionfactory">
        </property>
    </bean>

代码里的结构是HT类接受spring注入template,service基类(泛型类)继承HT并且实现DAOsupport接口(这个接口是泛型接口),service实现类继承service基类并且实现DAOsupport的子接口,具体代码如下:
HT类

public class HT {
    private HibernateTemplate ht;

    public HibernateTemplate getHt() {
        return ht;
    }
@Resource
    public void setHt(HibernateTemplate ht) {
        this.ht = ht;

    }
}

DAOsupport接口如下
```public interface DAOSupport {
public void save(T t);
}

基类代码如下:

```public class DAOsupportImpl<T> extends HT implements DAOSupport<T> {


    private Class<T> clazz;
    public DAOsupportImpl() {
        super();
        ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的
                                                                                            // 泛型的父类
                                                                                            // 类型
        clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型
        System.out.println("clazz ---> " + clazz);
    }
    @Override
    public void save(T t) {
        System.out.println("到dao"+t.getClass());
        getHt().save(t);
    }


    public Class<T> getClazz() {
        return clazz;
    }

    public void setClazz(Class<T> clazz) {
        this.clazz = clazz;
    }
}

service实现类代码如下

public class UserServiceImpl extends DAOsupportImpl<User> implements UserService {
}

action中的方法如下
``` public String save() {
//System.out.println("到action");
ActionContext.getContext().getApplication().remove("users");
this.userService.save(getModel());//model是user的一个实例
return "list";
}









http://www.doc100.net/bugs/t/507437/index.html

http://yulimeander.blog.sohu.com/120477191.html

或者你把readonly属性去掉也可以的;你在项目里调用find就是去读数据库,你不会去调这个方法去向数据库写数据;可以认为readonly是多余的;

图片说明
或者你用注解的就没有这个问题的。

帮你解决了问题,记得采纳我的答案