Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HibernateException:没有活动事务,createQuery无效_Java_Spring_Hibernate - Fatal编程技术网

Java HibernateException:没有活动事务,createQuery无效

Java HibernateException:没有活动事务,createQuery无效,java,spring,hibernate,Java,Spring,Hibernate,编程配置似乎已就位,但由于某些原因,应用程序引发异常: org.springframework.orm.jpa.JpaSystemException: createQuery is not valid without active transaction; nested exception is org.hibernate.HibernateException: createQuery is not valid without active transaction 代码: 更新 @Servic

编程配置似乎已就位,但由于某些原因,应用程序引发异常:

org.springframework.orm.jpa.JpaSystemException: createQuery is not valid without active transaction; nested exception is org.hibernate.HibernateException: createQuery is not valid without active transaction
代码:

更新

@Service
@Transactional
public class FilmServiceImpl implements FilmService {

    @Autowired
    private FilmDAO filmDAO;

    @Override
    public int createFilm(Film film) {
        return filmDAO.createFilm(film);
    }

    @Override
    public Film updateFilm(Film film) {
        return filmDAO.updateFilm(film);
    }

    @Override
    public void deleteFilm(int id) {
        filmDAO.deleteFilm(id);
    }

    @Override
    public List<Film> getAllFilms() {
        return filmDAO.getAllFilms();
    }

    @Override
    public Film getFilm(int id) {
        return filmDAO.getFilm(id);
    }

    @Override
    public List<Film> findFilms(int actorId, int categoryId, int languageId, int releaseYear) {
        return filmDAO.findFilms(actorId, categoryId, languageId, releaseYear);
    }
}
@服务
@交易的
公共类FilmServiceImpl实现FilmService{
@自动连线
私人电影;
@凌驾
公共电影(电影){
返回filmDAO.createFilm(film);
}
@凌驾
公共电影更新电影(电影){
返回filmDAO.updateFilm(film);
}
@凌驾
公共电影(内部id){
filmDAO.deleteFilm(id);
}
@凌驾
公共列表getAllFilms(){
返回filmDAO.getAllFilms();
}
@凌驾
公共电影getFilm(内部id){
返回filmDAO.getFilm(id);
}
@凌驾
公共列表FindFilm(int-actorId、int-categoryId、int-languageId、int-releaseYear){
return filmDAO.findFilms(actorId、categoryId、languageId、releaseYear);
}
}

尝试使用openSession()如下,因为getCurrentSession()只连接到当前会话:

Query searchQuery = sessionFactory.openSession().createQuery(...

另外,您需要使用适当的try..catch..finally阻塞代码,并在finally中使用
session.close()

从假定为@Transactional的服务调用DAO方法
@Service
@Transactional
public class FilmServiceImpl implements FilmService {

    @Autowired
    private FilmDAO filmDAO;

    @Override
    public int createFilm(Film film) {
        return filmDAO.createFilm(film);
    }

    @Override
    public Film updateFilm(Film film) {
        return filmDAO.updateFilm(film);
    }

    @Override
    public void deleteFilm(int id) {
        filmDAO.deleteFilm(id);
    }

    @Override
    public List<Film> getAllFilms() {
        return filmDAO.getAllFilms();
    }

    @Override
    public Film getFilm(int id) {
        return filmDAO.getFilm(id);
    }

    @Override
    public List<Film> findFilms(int actorId, int categoryId, int languageId, int releaseYear) {
        return filmDAO.findFilms(actorId, categoryId, languageId, releaseYear);
    }
}
Query searchQuery = sessionFactory.openSession().createQuery(...