实现多个操作共用一个事务的实现没加spring框架的时候如下做法: 
Session   session   =   HibrenateSessionFactory.getSession();(创建一个Session) 
Transaction   t   =   session.beginTransaction();(创建一个事物) 
session.save(bean);(保存) 
session.update(bean);(更新) 
t.commit();(事物提交) 
session.close();(session关闭)
这是我在网上搜索到的,如果hibernate和spring集成要达到这样的效果可以怎么做谢谢。

解决方案 »

  1.   

    这个怎么说呢。一会也说不清楚。LZ最好找本这方面的
    在事务类继承spring的hibernatesupport
    就可以使用getHibernateTemplete 来得到Hibernatetemplete了,他就相当于session 不需要自己去创建和关闭,他的创建和关闭全由Spring的容器管理。你只需要再spring的配置文件中配置事务的属性和控制器。和datasouce,sessionfactory的注入配置。
    想弄明白最好一找本SSH整合的书读读 
      

  2.   

    @Transactional
    将这个元注释添加到你想要被支持的方法前
    @Transactional
    public User login(String username, String password) {
    Query query = entityManager
    .createQuery(
    "select u from User as u where u.username = :username and u.password = :password")
    .setParameter("username", username).setParameter("password",
    password);
    return (User) (query.getResultList().isEmpty() ? null : query
    .getSingleResult());
    }
    这样,该托管Bean上所有被标上的方法都将会得到Spring的事务支持。如果你让Bean的所有方法都得到事务支持,那么就在类前面添加即可import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;import xchatroom.entity.User;
    import xchatroom.session.UserSession;@Transactional
    @Repository
    public class UserSessionImpl implements UserSession { @PersistenceContext(unitName = "xchatroomPU")
    private EntityManager entityManager; public void register(User user) {
    entityManager.persist(user);
    } public User login(String username, String password) {
    Query query = entityManager
    .createQuery(
    "select u from User as u where u.username = :username and u.password = :password")
    .setParameter("username", username).setParameter("password",
    password);
    return (User) (query.getResultList().isEmpty() ? null : query
    .getSingleResult());
    } public User get(long id) {
    return entityManager.find(User.class, id);
    } public void modify(User user) {
    entityManager.merge(user);
    } public User get(String username) {
    Query query = entityManager.createQuery(
    "select u from User as u where u.username = :username")
    .setParameter("username", username);
    return (User) (query.getResultList().isEmpty() ? null : query
    .getSingleResult());
    }}