spring + hibernateを使用するとHQL文はロールバックされませんが、session.saveOrUpdate()
になります。spring-hibernateトランザクションロールバックしません
UserServiceの
@Service
@Transactional(rollbackFor=Exception.class)
public class UserService {
@Autowired
private BaseDao dao;
public int updateTest(){
int i = dao.updateUser();
int t = 1/0;
return i;
}
}
BaseDao HQL文をサポートしていません
@Repository
public class BaseDao {
@Autowired
private SessionFactory sessionFactory;
private Session getSession(){
return sessionFactory.getCurrentSession();
}
public int updateUser(){
int i = 0;
/* String sql = "from Student where name = 'dengbojing'";
Query query = this.getSession().createQuery(sql);*/
Student s = new Student();
s.setId(1);
s.setAddress("1");
Query query = this.getSession().createQuery("update Student s set s.address = '1'");
query.executeUpdate();
//this.getSession().update(s);
return i;
}
}
Configurationクラス
@Configuration
@EnableConfigurationProperties(HibernateProperties.class)
@EnableTransactionManagement(proxyTargetClass=true)
public class HibernateConfig {
@Autowired
private HibernateProperties config;
@Bean(name="sessionFactory")
public LocalSessionFactoryBean localSessionFactoryBean(){
LocalSessionFactoryBean bean = new LocalSessionFactoryBean();
bean.setDataSource(dataSource());
bean.setHibernateProperties(config.getHibernateProperties());
bean.setPackagesToScan(config.getPackageToScan());
return bean;
}
@Bean
public DataSource dataSource(){
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(config.getDatasource().getDriverClassName());
source.setUsername(config.getDatasource().getUsername());
source.setUrl(config.getDatasource().getUrl());
source.setPassword(config.getDatasource().getPassword());
return source;
}
@Bean
public HibernateTransactionManager txManager(){
HibernateTransactionManager manager = new HibernateTransactionManager();
manager.setSessionFactory(localSessionFactoryBean().getObject());
manager.setDataSource(dataSource());
return manager;
}
}
春のトランザクション、問題plag私は2日間私に尋ねた、私は同様の問題を抱えている人を見たが、問題を解決しなかった
私はいくつかのテストを行い、それは私のために働いた..あなたの春/ hibバージョンは何ですか? –
本当ですか?あなたのコードを通過できますか? spring 4.2.5と4.3.11 – Deng
を休止してください。あなたがexecureUpdateを実行した後で例外をスローすると、更新はまだデータベースに残っていますか? –