如何在条件选择后跳过更新查询执行IN Hibernate

时间:2016-05-23 16:53:39

标签: java spring oracle hibernate

我在我的控制台中打印了一个stange HQL。我没有在repository中使用任何更新脚本。我正在通过Spring的Localsession工厂构建器创建会话工厂和hibernate会话。 我在选择标准后打印了一个更新查询。

 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;
    }
}

1 个答案:

答案 0 :(得分:0)

我在代码中发现了这个问题。感谢@ K139指点我分析路径。

Criteria.list()之后我在DB

返回的列表中设置了一些值
   statusList = criteria.list();
  status = statusList.get(0);\
status.setFode(status.getFode.trim)

我将trim功能从存储库移动到其他层,现在工作正常。 感谢