【问题标题】:java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist Spring Data sourcejava.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在 Spring 数据源
【发布时间】:2016-09-17 12:42:51
【问题描述】:

我正在将工作中的休眠项目转换为 Spring 休眠项目。在现有项目中,会话工厂的创建是通过加载休眠 cfg 文件完成的。因为我要去 Spring,我通过在 java 中配置通过 Localsessionfactory 修改了会话创建。我得到了一个奇怪的例外如下

ORA-00942: table or view does not exist 

但在休眠 cfg 查找中同样可以正常工作。

我正在使用两个事务管理器。下面是我的代码 仓库类

@Repository
public class TestImpl implements
        TestRepository {

    @Autowired
    @Qualifier("fSessionFactory")
    SessionFactory sessionFactory;  

    @Autowired
    @Qualifier("dSessionFactory")
    SessionFactory sessionFactory2;


    @SuppressWarnings("unchecked")
    @Transactional("dTransaction")
    public  Recordse getOrders(String code, int id   ) throws PersistenceException {
            Session session = null;
        try {
            session =sessionFactory.getCurrentSession();
            List<Order> orderList  =  session
                    .createQuery("FROM Orders WHERE CODE = :code  AND NUM_CC = :id " )
                    .setParameter("code", code)
                    .setParameter("id", id)
                    .list();            
                    }
        catch (Exception e) {
            throw new PersistenceException(e);
        }


        return empSickTime ;
    }

    @Transactional("fTransaction")
    @Override
    public SelectedRecords getRecords(String code, String grpId) throws PersistenceException {
        Session session = null;

        try {
            session = sessionFactory2.getCurrentSession();

            List<Records> recList  =  session
                    .createQuery("FROM Records WHERE CODE = :code  AND GRP_CC = :id " )
                    .setParameter("code", code)
                    .setParameter("id", id)
                    .list();            
                    }


        }
        catch (HibernateException e) {
            throw new PersistenceException(e);
        }

        return qualifiedFleet;
    }


}

PersistencConfig1

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence.properties" })
@ComponentScan({ "com.test.test2.*" })
public class PersistenceConfiguration1 {

    @Autowired
    private Environment env;

    @Bean(name="    ")
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(testDataSource());
        sessionFactory.setPackagesToScan(new String[] {
                " com.test.test2"});
        sessionFactory.setHibernateProperties(hibernateProperties1());

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

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
        return new PersistenceExceptionTranslationPostProcessor();
    }

    Properties hibernateProperties1() {
        return new Properties() {
            {
                setProperty("hibernate.hbm2ddl.auto",
                        env.getProperty("hibernate.hbm2ddl.auto"));
                setProperty("hibernate.dialect",
                        env.getProperty("hibernate.dialect"));
                setProperty("hibernate.globally_quoted_identifiers", "true");
            }
        };
    }
}

PersistenceConfig2

@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence.properties" })
@ComponentScan({ "com.test.test3.*" })
public class PersistenceConfigurationDOTC {

    @Autowired
    private Environment env;

    @Bean(name="dSessionFactory")
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(test1DataSource());
        sessionFactory.setPackagesToScan(new String[] {
                "com.test.test3.entity"});
        sessionFactory.setHibernateProperties(hibernateProperties());

        return sessionFactory;
    }

    @Bean
    public DataSource test1DataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(env.getProperty("jdbc1.driverClassName"));
        dataSource.setUrl(env.getProperty("jdbc1.url"));
        dataSource.setUsername(env.getProperty("jdbc1.user"));
        dataSource.setPassword(env.getProperty("jdbc1.pass"));

        return dataSource;
    }

     @Bean(name = "fTransaction")
    @Autowired
    public HibernateTransactionManager transactionManager() {
        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setSessionFactory(sessionFactoryFCDS().getObject());

        return txManager;
    }



    Properties hibernateProperties() {
        return new Properties() {
            {
                setProperty("hibernate.hbm2ddl.auto",
                        env.getProperty("hibernate.hbm2ddl.auto"));
                setProperty("hibernate.dialect",
                        env.getProperty("hibernate.dialect"));
                setProperty("hibernate.globally_quoted_identifiers", "true");
            }
        };
    }
}

我错过了什么吗?

【问题讨论】:

  • 您可能连接到错误的 Oracle 实例和/或 Oracle 架构,您能验证一下吗?

标签: java spring oracle hibernate spring-mvc


【解决方案1】:
@Bean(name="    ")
public LocalSessionFactoryBean sessionFactory() {

您的 bean 名称似乎不正确?

另一件事是在您的fTransaction 中,当您声明sessionFactory2 时,您正在使用dSessionFactory 中的会话工厂

@Autowired
@Qualifier("dSessionFactory")
SessionFactory sessionFactory2;

然后在fTransaction中使用

@Transactional("fTransaction")
@Override
public SelectedRecords getRecords(String code, String grpId) throws PersistenceException {
    Session session = null;

    try {
        session = sessionFactory2.getCurrentSession();

我猜你指的是错误的数据库连接。

下次我建议给你的属性起更有意义的名字,比如paymentSessionFactorygeoSessionFactory 等,这样你就不会混淆var1session2

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 2012-04-16
    • 2019-01-22
    • 2015-11-09
    • 2011-12-10
    • 2015-01-30
    相关资源
    最近更新 更多