2013-01-11 5 views
2

En utilisant un ressort DataSource et un QueryDsl SQLQueryImpl, comment spécifier le schéma ou définir le schéma?QueryDsl Set Schema

cas de test est la suivante:

  1. utilisation querydsl-maven-plugin (2.9.0) pour se connecter à la base de données DB2 pour générer Q-classes spécifiant <schemaPattern>
  2. Spring crée un DataSource haricot
  3. DataSource haricot est peuplé par des scripts (CREATE SCHEMA FOO, CREATE TABLE FOO.BAR etc)
  4. importations de test JUnit DataSource
  5. requête en utilisant new SQLQueryImpl(dataSource.getConnection(), Configuration.DEFAULT)

Erreur:

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

Notez que cette implémentation de test est une base de données de H2, mais la base de données de production est DB2. Jusqu'à présent, j'ai essayé de spécifier le schéma dans les chaînes de connexion JDBC en vain.

+1

Quelle est l'URL de votre base de données pour la base de données H2? –

+0

L'URL de base de données est 'jdbc: h2: mem: testdb'. Je ne peux pas spécifier le schéma dans l'URL de connexion car le schéma n'existe pas encore. Le 'ResourceDatabasePopular' est appelé après la création de la base de données, et les instructions' CREATE SCHEMA' sont exécutées après cela. –

+1

Vous pouvez utiliser la fonctionnalité 'INIT' pour créer le schéma lors de l'ouverture de l'URL de la base de données (' jdbc: h2: mem: test; INIT = CREER SCHEMA SI NON EXISTE ... '). –

Répondre

1

J'ai été en mesure d'étendre SQLTemplates avec ma propre implémentation qui a appelé la méthode protégée setPrintSchema(true);.

3

com.mysema.query.sql.SQLTemplates a une méthode de construction appelée printSchema(). Initialisez SQLTemplates en utilisant la méthode builder() et appelez printSchema() avant build(). Exemple à suivre:

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