Java QueryDsl集合模式

Java QueryDsl集合模式,java,spring,db2,h2,querydsl,Java,Spring,Db2,H2,Querydsl,使用SpringDataSource和QueryDslSQLQueryImpl,如何指定模式或设置模式 测试用例是: 使用querydsl maven插件(2.9.0)连接到DB2数据库,生成指定 Spring创建了一个DataSourcebean DataSourcebean由脚本填充(createschemafoo,createtablefoo.BAR等) JUnit测试导入数据源 使用新的SQLQueryImpl(dataSource.getConnection(),Configurati

使用Spring
DataSource
和QueryDsl
SQLQueryImpl
,如何指定模式或设置模式

测试用例是:

  • 使用querydsl maven插件(2.9.0)连接到DB2数据库,生成指定
  • Spring创建了一个
    DataSource
    bean
  • DataSource
    bean由脚本填充(
    createschemafoo
    createtablefoo.BAR
    等)
  • JUnit测试导入数据源
  • 使用新的SQLQueryImpl(dataSource.getConnection(),Configuration.DEFAULT)进行查询
  • 错误:

    org.h2.jdbc.JdbcSQLException: Table "BAR" not found; SQL Statement: ...
    

    请注意,此测试实现是一个H2数据库,但生产数据库是DB2。到目前为止,我已经尝试在JDBC连接字符串中指定模式,但没有效果。

    该模式在Q-types中编码。它在SQL序列化中通过RelationalPath接口访问

    我能够使用自己的实现扩展
    SQLTemplates
    ,该实现称为受保护方法
    setPrintSchema(true)

    com.mysema.query.sql.SQLTemplates
    有一个名为
    printSchema()
    的生成器方法。使用
    builder()
    方法初始化
    SQLTemplates
    ,并在
    build()
    之前调用
    printSchema()
    。要遵循的示例:

    SQLTemplates templates = OracleTemplates.builder().printSchema().build();
    

    H2数据库的数据库URL是什么?数据库URL是
    jdbc:H2:mem:testdb
    。我无法在连接URL中指定架构,因为该架构尚不存在。创建数据库后会调用
    ResourceDatabasePopular
    ,然后执行
    CREATE SCHEMA
    语句。打开数据库URL时,可以使用
    INIT
    功能创建架构(
    jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS…
    )。是的,架构名称(
    FOO
    )可通过
    getSchemaName()
    访问,但生成的SQL不是完全限定的。应为:
    从FOO.BAR中选择COL1
    。实际:
    从BAR中选择COL1