リポジトリが注入されている他のクラスでsaveメソッドを使用するには、インタフェースCRUDRepositoryを使用しています。JPA Hibernate + UCP Oracle。 saveメソッドから実行されたクエリはテーブルのインデックスを使用しません
このメソッドは、データベースから挿入されたこのオブジェクトを取得するための挿入と選択を行います。
実行されたクエリは非常に簡単です:
select auditoriab0_.adb_seqitm as adb_seqitm1_1_0_,
auditoriab0_.adb_codprv as adb_codprv2_1_0_, auditoriab0_.adb_ideses as adb_ideses3_1_0_,
auditoriab0_.adb_locata as adb_locata4_1_0_, auditoriab0_.adb_rqores as adb_rqores5_1_0_,
auditoriab0_.adb_rstime as adb_rstime6_1_0_, auditoriab0_.adb_subprv as adb_subprv7_1_0_,
auditoriab0_.adb_swierr as adb_swierr8_1_0_, auditoriab0_.adb_tiptrz as adb_tiptrz9_1_0_,
auditoriab0_.adb_ubitrz as adb_ubitrz10_1_0_, auditoriab0_.adb_xmltxt as adb_xmltxt11_1_0_
from nwt00.auditoria_bus_gsi auditoriab0_ where auditoriab0_.adb_seqitm=:p1
adb_seqitm
列があり、その上にインデックス(これは、テーブルの主キーです)。
たとえば、このクエリがSQLDeveloperで実行された場合、Explainプランは正しいものです(ROWIDによるアクセス)。
ただし、このクエリが休止状態で実行された場合、結果はフルスキャンになります。
この問題をお手伝いできますか?私はこの特定の問題についてインターネット上で実際の解決策を見たことがないので、感謝します。
ありがとうございます。
この現象は、ucp(ユニバーサル接続プール)プールで発生します。私のデータベースのBean構成は、次の(変数がapplication.propertiesファイルによってsettedされている)である:私は春ブーツ+春データJPAを使用してい
UniversalConnectionPoolManager mgr;
try {
mgr = UniversalConnectionPoolManagerImpl. getUniversalConnectionPoolManager();
mgr.destroyConnectionPool("hotels");
} catch (UniversalConnectionPoolException e) {
}
PoolDataSourceImpl poolDataSource = (PoolDataSourceImpl) PoolDataSourceFactory.getPoolDataSource();
poolDataSource.setUser(userName);
poolDataSource.setPassword(passWord);
poolDataSource.setURL(url);
poolDataSource.setConnectionFactoryClassName(driver);
poolDataSource.setConnectionPoolName("hotels");
poolDataSource.setInitialPoolSize(initialNumConnections);
poolDataSource.setMinPoolSize(minNumConnections);
poolDataSource.setMaxPoolSize(maxNumConnections);
poolDataSource.setMaxConnectionReuseTime(reconnectTime);
poolDataSource.setMaxConnectionReuseCount(maxReconnectCount);
poolDataSource.setTimeToLiveConnectionTimeout(timeToLive);
poolDataSource.setConnectionWaitTimeout(connectWaitTimeOut);
poolDataSource.setValidateConnectionOnBorrow(true);
poolDataSource.setInactiveConnectionTimeout(inactiveConnectionTimeOut);
Properties properties = new Properties();
properties.put("v$session.program", "xxxx");
properties.put("defaultNChar", "false");
poolDataSource.setConnectionProperties(properties);
。これらは私のpom.xmlに依存しています。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4.0</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ucp</artifactId>
<version>11.2.0.4.0</version>
</dependency>
質問を再フォーマットして [ツアー](https://stackoverflow.com/tour)、 をもう一度見て、[ヘルプセンター](https:// stackoverflow)を読んでください。 [https://stackoverflow.com/help/how-to-ask] と[ここではどのようなトピックを聞くことができますか?](https://stackoverflow.com/help/how-to-ask) ://stackoverflow.com/help/on-topic)。 –
テーブル内の 'adb_seqitm'カラムのデータ型は何ですか?また、Javaクラスの対応するプロパティの型は何ですか?このフィールドにハイバネートマッピングを表示できますか? – krokodilko
@krokodilkoご回答いただきありがとうございます。期待どおり、エラーはデータベースタイプとJavaタイプの間にあります。 DDBBでは、このフィールドはString(varchar2(15))です。 Javaでは、このフィールドはString型でマップされます。私は休止状態かデータベースがインデックスを壊す変換を行っていると思います。私はString型でjava型を変更し、クエリは正常に動作しています。計画が正しいことを説明してください。どうもありがとうございました。 –