これはSO Questionへのフォローアップの質問です。私はjpqエンティティからjooqクラスを自動生成するためにjooq codegenを使用しています。 jooqをSQL問合せビルダーとして使用し、JPA EntityManagerを使用して実際の問合せを実行する予定です。しかし、jooqは、スキーマがデフォルトのPUBLICのエンティティからテーブルを生成しています。例えばJOOQで生成されたクラスのスキーマはPUBLICにデフォルトで設定されています
は私のクエリは
select SCHEMA_A.colA, SCHEMA_A.colB from SCHEMA_A.tableA;
jooqこれはスキーマが無効であるので、私は次のクエリを発射する場合、クエリが失敗作っている
select PUBLIC.colA, PUBLIC.colB from PUBLIC.tableA;
生成されなければならない場合。
entityManager.createNativeQuery(sqlString).getResultList();
自動生成されたコードに実際のスキーマ名が含まれるようにするには、どの設定を追加する必要がありますか?
codegenの:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>3.9.1</version>
<!-- The plugin should hook into the generate goal -->
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta-extensions</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>com.yaswanth</groupId>
<artifactId>domain</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<configuration>
<!-- Generator parameters -->
<generator>
<database>
<name>org.jooq.util.jpa.JPADatabase</name>
<outputSchema>[SCHEMA_A]</outputSchema>
<properties>
<!-- A comma separated list of Java packages, that contain your entities -->
<property>
<key>packages</key>
<value>com.yaswanth.domain.entity</value>
</property>
</properties>
</database>
<target>
<packageName>com.yaswanth.domain.entity.jooq</packageName>
<directory>target/generated-sources/jooq</directory>
</target>
</generator>
</configuration>
</plugin>
</plugins>
</build>
jooq春豆の設定
<bean id="dslContext" class="org.jooq.impl.DefaultDSLContext">
<constructor-arg ref="jooqConfig" />
</bean>
<bean id="jooqConfig" class="org.jooq.impl.DefaultConfiguration">
<property name="SQLDialect" value="MYSQL" />
<property name="dataSource" ref="myDataSource" />
<property name="settings" ref="settings"/>
</bean>
<bean id="settings" class="org.jooq.conf.Settings">
<property name="renderSchema" value="true" />
</bean>
あなたは私のために2つのことを試すことができます:1) ' 'のスキーマ名から '[]'を削除し、2)XML要素 ' PUBLIC inputSchema>'を追加して何か変わる? –
それは魅力のように動作します!私は[]の括弧をこの作業をする無駄な最後の試みとして含めました。 PUBLICスキーマを含めることが重要です。しかし、エンティティに関するメタデータ情報を格納するh2 dbがユーザによって処理されるはずであるということを考慮すれば、それは明らかではありませんか?つまり、 PUBLIC inputSchema>が毎回のデフォルトであり、ユーザーに含めるべきではありません。 –
yaswanth
また、エンティティの@Tableアノテーションにスキーマプロパティを追加すると、そこからスキーマが検出されますか? – yaswanth