【发布时间】:2016-05-23 16:53:38
【问题描述】:
我在控制台中打印了一个 stange HQL。我没有在存储库中使用任何更新脚本。我正在通过 spring 的 Localsession factory builder 创建会话工厂和休眠会话。 我在选择条件后打印了一个更新查询。
Criteria criteria = session
.createCriteria(Test.class);
criteria.add(Restrictions.eq("testKey.fode",
airlineCode));
criteria.add(Restrictions.eq(
"testKey.number",eId));
criteria.createAlias("currentMonth", "requiredMonth");
criteria.add(Restrictions.eq("requiredMonth.type",
currentMonthType));
statusList = criteria.list();
在上面的criteria.list() 中工作正常,但是在更新查询后,表中的大多数列都被打印出来了?象征。如下所示
update STATUS set CUR_BASE=?, CUR_TYPE=?, CUR_GRP=?, CUR_TOM=?, CHECK_MON=? where FODE=? and CURRENTMONTH=? and E_NUM=?.
我想知道有什么办法可以跳过更新查询的执行。
我的持久化配置:
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence.properties" })
@ComponentScan({ "com.test.test2.*" })
public class PersistenceConfiguration1 {
@Autowired
private Environment env;
@Bean(name="dsession")
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(testDataSource());
sessionFactory.setPackagesToScan(new String[] {
" com.test.test2"});
return sessionFactory;
}
@Bean
public DataSource testDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
@Bean(name="dTransaction")
@Autowired
public HibernateTransactionManager transactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
}
【问题讨论】:
-
提供完整的 DAO 类(代码)。 Hibernate 不会突然生成 HQL,您的代码中可能会执行更新(事务流)。
-
Hibernate 在执行查询之前刷新所有待处理的数据库更改,以确保数据对于当前事务是一致的。如果禁用此功能,您可能会遇到当前事务的不一致数据。
标签: java spring oracle hibernate