刚学Spring,碰到一个问题,看网上帖子说已经废弃HibernateTemplate了,但是没找到相关的配置,经实验确实用hibernate3.6.10可以运行的程序改到hibernate4.1的时候会出错,想问下该怎么使用?
写了一个简单的小程序,想问下具体该怎么改动呢?下面是Spring配置
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"在使用hibernate4.1的时候这里的hibernate3我是改成hibernate4的<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/spring_test" />
<property name="username" value="root" />
<property name="password" value="1234" />
</bean> <bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="mappingResources">
<list>
<value>com/xlinspace/www/entity/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
javax.persistence.validation.mode=none
       </value>
</property>
</bean>
        <bean id="userDao" class="com.xlinspace.www.dao.UserDao">
<property name="sessionFactory" ref="mySessionFactory"></property>
</bean>
下面简单的DAO代码public class UserDao { private HibernateTemplate ht = null;
private SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}

private HibernateTemplate getHibernateTemplate(){
if(ht==null){
ht = new HibernateTemplate(getSessionFactory());
}
return ht;
}

public Integer save(User user){
return (Integer)getHibernateTemplate().save(user);
// Session session = getSessionFactory().getCurrentSession(); 实验不能这么取
// session.beginTransaction();
// session.save(user);
// session.getTransaction().commit();
}
}下面是简单的存个数据public class UseUser { public static void main(String[] args){
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

User user = new User();
user.setAge(10);
user.setName("Lucky");

UserDao userDao = (UserDao)ctx.getBean("userDao");
userDao.save(user);
}
}

解决方案 »

  1.   

    hibernate4还木有用过啊,去下个官方文档,里面肯定有整合spring的
      

  2.   

    没有Session时不会自动创建session,开启OpenSessionInView就好了。就是Test的时候有些麻烦。
    <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sessionFactory</param-value>
    </init-param>
    <init-param>
    <param-name>singleSession</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <param-name>flushMode</param-name>
    <param-value>AUTO</param-value>
    </init-param>
    </filter>