繁体   English   中英

从Spring Boot查询Oracle数据库时表名称无效

[英]invalid table name while consulting a oracle database from spring boot

我正在尝试从Spring Boot查阅oracle表,但我没有成功,我遇到的问题是:

“ 2018-04-10 12:32:10.623错误22668 --- [restartedMain] ohengine.jdbc.spi.SqlExceptionHelper:ORA-00903:密码没有v├ílido”

这是我的应用程序属性:

spring.profiles.active=dev
spring.session.store-type=jdbc
spring.jpa.hibernate.ddl-auto=none

spring.datasource.url=jdbc:oracle:thin:@notmyserver:1521:lnkqhp 
spring.datasource.username=notmyuser
spring.datasource.password=notmypass
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring2.datasource.driver-class-name=org.h2.Driver
spring2.datasource.url=jdbc:h2:file:~/test;MODE=MYSQL;DB_CLOSE_DELAY=-1...
spring2.datasource.username=sa
spring2.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

spring.h2.console.enabled=true

spring.jpa.database=default

spring.thymeleaf.mode=LEGACYHTML5

这是我的OracloDBConfig类:

@Configuration
@Profile("prod")
public class OracleDbConfig {

@Autowired
private ApplicationContext appContext;

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory2() {
    System.out.println(" ########### ENTRANDO A entityManagerFactory ####################");
    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
    adapter.setDatabase(Database.ORACLE);
    LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();
    System.out.println("****** Datasource: "+appContext.getBean(DataSource.class));
    emfb.setDataSource(appContext.getBean(DataSource.class));
    emfb.setPersistenceUnitName("entityManagerFactory2");
    emfb.setPackagesToScan("com.reportes.domain");
    emfb.setJpaVendorAdapter(adapter);
    return emfb;
}

@Bean
public DataSource db2Datasource() {
    DriverManagerDataSource dataSource
            = new DriverManagerDataSource();
    dataSource.setDriverClassName(
            appContext.getEnvironment().getProperty("jdbc.driver-class-name"));
    dataSource.setUrl(appContext.getEnvironment().getProperty("spring.datasource.url"));
    dataSource.setUsername(appContext.getEnvironment().getProperty("spring.datasource.username"));
    dataSource.setPassword(appContext.getEnvironment().getProperty("spring.datasource.password"));

    return dataSource;
}

@Bean
public PlatformTransactionManager transactionManager2(EntityManagerFactory emf) {
    System.out.println(" ########### ENTRANDO A transactionManager ,. ####################");
    return new JpaTransactionManager(emf);
}

}

这是我的实体:

@Entity(name = "BUG")
@Table(name = "BUG", schema = "LINK_REDMOB_MOBILE_DB")
public class Bug implements Serializable{

@Id
@Column(name = "BG_BUG_ID")
private int BG_BUG_ID;
@Column(name = "BG_STATUS")
private  String BG_STATUS;
@Column(name = "BG_DETECTION_DATE")
private  String  BG_DETECTION_DATE;
@Column(name = "BG_DETECTED_BY")
private  String BG_DETECTED_BY;
@Column(name = "BG_RESPONSIBLE")
private  String BG_RESPONSIBLE;
@Column(name = "BG_SEVERITY")
private  String BG_SEVERITY;
@Column(name = "BG_SUMMARY")
private  String BG_SUMMARY;
@Column(name = "BG_DESCRIPTION")
private  String BG_DESCRIPTION;
@Column(name = "BG_DEV_COMMENTS")
private  String BG_DEV_COMMENTS;



public Bug() {
}

public Bug(
        int BG_BUG_ID,
        String BG_STATUS,
        String BG_DETECTION_DATE,
        String BG_DETECTED_BY,
        String BG_RESPONSIBLE,
        String BG_SEVERITY,
        String BG_SUMMARY,
        String BG_DESCRIPTION,
        String BG_DEV_COMMENTS

) {
    this.BG_BUG_ID = BG_BUG_ID;
    this.BG_STATUS = BG_STATUS;
    this.BG_DETECTION_DATE = BG_DETECTION_DATE;
    this.BG_DETECTED_BY = BG_DETECTED_BY;
    this.BG_RESPONSIBLE = BG_RESPONSIBLE;
    this.BG_SEVERITY = BG_SEVERITY;
    this.BG_SUMMARY = BG_SUMMARY;
    this.BG_DESCRIPTION = BG_DESCRIPTION;
    this.BG_DEV_COMMENTS = BG_DEV_COMMENTS;
}



public int getBG_BUG_ID() {
    return BG_BUG_ID;
}

public String getBG_STATUS() {
    return BG_STATUS;
}

public String getBG_DETECTION_DATE() {
    return BG_DETECTION_DATE;
}

public String getBG_DETECTED_BY() {
    return BG_DETECTED_BY;
}

public String getBG_RESPONSIBLE() {
    return BG_RESPONSIBLE;
}

public String getBG_SEVERITY() {
    return BG_SEVERITY;
}

public String getBG_SUMMARY() {
    return BG_SUMMARY;
}

public String getBG_DESCRIPTION() {
    return BG_DESCRIPTION;
}

public String getBG_DEV_COMMENTS() {
    return BG_DEV_COMMENTS;
}
}

这是我的资料库

@Repository
public interface ReportRepository extends JpaRepository<Bug, Long> {

    @Query("SELECT BG_BUG_ID, BG_STATUS, BG_DETECTION_DATE, BG_DETECTED_BY, 
BG_RESPONSIBLE, BG_SEVERITY, BG_SUMMARY, BG_DESCRIPTION, BG_DEV_COMMENTS 
FROM LINK_REDMOB_MOBILE_DB.BUG WHERE BG_STATUS IN('Abierto','Reabierto') AND 
BG_USER_05='Diferido' 
ORDER BY BG_BUG_ID")

    List<Bug> findByDefectosDiferidos();
}

这是我在控制台输出上的“ Caused by”错误:

java.lang.IllegalStateException: Failed to execute CommandLineRunner

Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: 
could not extract ResultSet; SQL [n/a]; nested exception is 
org.hibernate.exception.SQLGrammarException: could not extract ResultSet

Caused by: org.hibernate.exception.SQLGrammarException: could not extract 
ResultSet

Caused by: java.sql.SQLSyntaxErrorException: ORA-00903: nombre de tabla no 
válido

我做错了什么?

问题出在哪儿? 问题在于春季的数据源配置。

  1. 尝试像这样指定您的架构:

    select * from your_schema.your_table;

  2. 在Oracle端上验证您的许可。

    2.1使用相同的凭据在SQL Developer中执行select语句。 验证没有错误。 如果有错误,请参阅下一步。

    2.2在SQL Developer中执行以下操作。 您应该看到表和架构。 如果您没有看到表格,则注释中指出的授权或同义词有问题。

    SELECT * FROM all_tables WHERE REGEXP_LIKE(table_name, 'BUG', 'i');

    2.3验证表名称BUG和架构XXXXXXX。 然后在选择语句中使用该架构。

    SELECT * FROM your_schema.bug;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM