私はquery.getSingleResult()を使用したときに、なぜEclipseLinkはクエリキャッシュにのみ動作しますか?

StackOverflow https://stackoverflow.com/questions/672754

  •  21-08-2019
  •  | 
  •  

質問

私のエンティティは、このようになりますという名前のクエリがあります:

@NamedQuery(name = "Person.find", query = "select p from Organization p where p.name=:NAME")

私は、クエリキャッシュのヒントを設定したい私のコードでは:

query.setHint("eclipselink.cache-usage", "CheckCacheThenDatabase");

私は、全体の結果リストを取得しようとする場合:

List<Person> result = query.getResultList();

のEclipseLinkは、例外をスローします:

Exception [EclipseLink-6124] (Eclipse Persistence Services - 1.0.1 (Build 20080905)): org.eclipse.persistence.exceptions.QueryException
Exception Description: Required query of class org.eclipse.persistence.queries.ReadAllQuery, found class org.eclipse.persistence.queries.ReadObjectQuery

私は1つの結果だけを取得しようとした場合、それは動作します:

Person person = query.getSingleResult();
私は、クエリヒントを削除する場合は

、その後、getResultList()も動作します。

私は例外を理解していない - それは)それが特異的(getResultListを期待していることを言っていません?私が間違って何をしているのですか?

役に立ちましたか?

解決

のEclipseLinkドキュメントは述べています:

「EclipseLinkのは、このようなデータや複数のオブジェクトを返すような複雑な結果セットを持っているネイティブクエリまたはクエリのキャッシュの使用をサポートしていません。」

また、ドキュメントは言う:

「はCheckCacheThenDatabase - あなたはデータベースにアクセスするに頼る前に、完全にキャッシュをチェックするために、任意の読み取りオブジェクトのクエリを設定することができます。」

動作はOKのようですので、私はちょうど例外が誤解を招く見つかっ

EDIT:、それが十分でなければなりませんエンティティ定義では、このような何かを試してみてください:(ウェブページ上でコード化されたエラーが存在することができるようにする)

Entity
@Cache(expiry = 3600000, // 1 hour size = 10000)
@NamedQueries({
  @NamedQuery(name = "Person.findByPK", query = "select p from Person p " +
  "where p.name=:NAME",
  hints = {
    @QueryHint(name = QueryHints.CACHE_USAGE,
    value = CacheUsage.CheckCacheThenDatabase),
    @QueryHint(name = QueryHints.QUERY_TYPE, value = QueryType.ReadObject)
  }
})
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top