Spring 与 Hibernate 集成 Transactional设置为只读

@Transactional标签用于标记ServiceImpl使用事务,并且能够打开一个sessionFactory的session,并且打开事务。

如果在这个标签为@Transactional(propagation = Propagation.NOT_SUPPORTED),就不打开session了,自然也不会打开事务,你要自己打开并且维护它,关闭session,在session范围内更改了对象的值,他也不会相应的更新到数据库中(前提是你没有打开事务)。

@Service
@Transactional
public class MMCommentServiceImpl implements MMCommentService {
    @Resource
    private SessionFactory sessionFactory;

    //设置只读
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    @Override
    public List<MMComment> getCommentList(int id) {
        Session session =  sessionFactory.openSession();
        List<MMComment> list =session
                .createQuery("from MMComment where image.id = :id order by zan desc")
                .setMaxResults(8)//最多取几条,热门的
                .setInteger("id", id)
                .list();
        session.close();
        return list;
    }

}
原文地址:https://www.cnblogs.com/wuyou/p/3687283.html