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(...