問題タブ [spring-data-commons]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring Data Commons をビルドできないのはなぜですか?
私は自分のマシンに spring-data-commons を構築しようとしています:
私は次のことをしました:
私は得た:
私の現在の設定:
java.util.Date.toInstant
さらに、 jdkでメソッドを見つけることができました。
アップデート:
mvn clean install -X
出力の一部を次に示します。
これは-target 1.6 -source 1.6
、以下のスニペットと関係がありますか?
spring-mvc - @SortDefault Sort オブジェクトをコントローラ メソッドに渡すことはできませんか?
それはそのドキュメントに記載されてい@SortDefault
ます
Sort インスタンスをコントローラー ハンドラー メソッドに挿入するときに使用される既定の Sort オプションを定義するための注釈。
しかし、実際には、次の例外があります。
[org.springframework.data.domain.Sort] のインスタンス化に失敗しました: デフォルトのコンストラクターが見つかりません。ネストされた例外は java.lang.NoSuchMethodException: org.springframework.data.domain.Sort.() です
ここで何か見逃しましたか?
postgresql - openjpa 2.4.1 で cachedCriteriaQuery が正しくないため、接尾辞 IN を持つ spring-data-jpa クエリ メソッドによるクエリに失敗しました
アップデート:
spring-data-jpa リポジトリ クエリ メソッドのソース コードを掘り下げたところ、根本的な原因は以下のPartTreeJpaQuerycreateQuery
のメソッドであることがわかりました。
このメソッドは、spring-data-jpa リポジトリ クエリ メソッド インターフェースを呼び出すときに、RepositoryFactorySupportのQueryExecutorMethodInterceptorのinvokeメソッドによって呼び出されます。
最初の呼び出しでは、cachedCriteriaQuery
変数は期待どおりでSELECT s FROM Subtask s WHERE (s.deviceId IN (:deviceIdList) AND s.state IN (:states)) ORDER BY s.id
あり、values
変数は[[1000000002], [5, 10]]
どちらも正しいです。
ただし、2 回目の呼び出しでは、cachedCriteriaQuery
isSELECT s FROM Subtask s WHERE (s.deviceId IN ('1000000002') AND s.state IN (5,10)) ORDER BY s.id
とvalues
is [[1000000003], [5]]
. openjpa および jpa クエリに渡される値は正しいように見えますが、criteriaQuery
そうではありません。
openjpa
ライブラリをバージョン2.2.2に変更した場合、このメソッドを呼び出すたびに、cachedCriteriaQuery
変数はALWAYS SELECT s FROM Subtask s WHERE (s.deviceId IN (:deviceIdList) AND s.state IN (:states)) ORDER BY s.id
になります。
cachedCriteriaQuery
変数が変更される理由これは、PartTreeJpaQuery の QueryPreparer のプライベートかつ最終的なフィールドであり、それを割り当てることができる唯一の方法は、QueryPreparer のコンストラクターでなければなりません。そこでブレークポイントを切り替えましたが、1 回目と 2 回目の呼び出しの間に、このコンストラクターを呼び出したプロセスが見られませんでした。この変数はどのように変更されるのでしょうか?
私が行ったのは、openjpa ライブラリを変更しただけです。
ただし、上記のコードは spring-data-jpa および/または spring-data-commons です。これは、クエリ作成の動作にどのような影響を与える可能性がありますか?
フィールドとフィールドでサブタスク エンティティをクエリfind IN
するには、単体テスト コードを次のように指定します。最初のクエリは find IN deviceId and、state andです。2 回目のクエリは find IN deviceIdと stateです。deviceId
state
1000000002
5
10
1000000003
5
subtaskDao は以下のようなspring-data-jpa repository query method
インターフェースです
ただし、結果は以下のとおりであり、期待どおりには正しくありません。2 回目のクエリの結果は、 deviceId1000000002
ではなくdeviceId のサブタスクになり1000000003
ます。
openjpa.Log によると、初回はクエリ(7272行目) Query "SELECT s FROM Subtask s WHERE (s.deviceId IN (:deviceIdList) AND s.state IN (:states)) ORDER BY s.id"
。しかし、2回目はクエリを実行しますQuery "SELECT s FROM Subtask s WHERE (s.deviceId IN ('1000000002') AND s.state IN (5,10)) ORDER BY s.id"
。パラメータがとでないのはなぜですか?:deviceIdList
:states
spring
使用した、spring-data-jpa
、jdbc driver
およびライブラリのバージョンはopenjpa
次のとおりで、jdk は1.8
、データベースはPostgreSQL 9.4 windows version
です。
エンティティ クラスは、ビルド時に次のように拡張されます。openjpa-maven-plugin
EntityManagerFactoryBean
設定 とは次のpersistence.xml
とおりです。
QueryCacheとQuerySQLCacheの両方をfalseに設定しても、正しく動作しません。
ただし、openjpa
ライブラリをバージョン2.2.2
にダウングレードすると、すべて同じコードと構成で正確に機能します。また、@Query
以下のように subtaskDao インターフェースに を使用すると、 と一緒でもうまく動作しopenjpa version 2.4.1
ます。
私が発見していないトリッキーは何ですか?
java - Spring Data Slice: getSize() と getNumberOfElements() の違い
Spring Data クラスのgetSize()
との違いは何ですか?getNumberOfElements
org.springframework.data.domain.Slice
Javadoc は、ここではあまり役に立ちません。