0

こんにちは、次のように定義された名前付きクエリがありますが、実行すると、要求したフィールドだけでなくオブジェクト全体が返されます。そのオブジェクトの列だけを返したいときに欠けているものはありますか? 前もって感謝します

@NamedQueries ({
@NamedQuery(
          name="findSubmissionForSubmissionRowUniqueBankId",
          query="SELECT o.submission FROM SubmissionRow o WHERE     o.uniqueBankId = :uniqueBankId",
          hints={@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
                 @QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_SIZE, value="1000"),
                 @QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_EXPIRY, value="18000")
          })

}))

このクエリに対して実行するSQLは

EJBQueryImpl(ReadObjectQuery(name="findSubmissionForSubmissionRowUniqueBankId" referenceClass=SubmissionRow sql="SELECT ID, ARCHIVE_BANK_ID, EXTERNAL_SOURCE_DETAILS,UNIQUE_BANK_ID, SUBMISSION_ID FROM FE_TEST.SUBMISSION_ROW WHERE (UNIQUE_BANK_ID = ?)"))

結合を次のように定義しました

@ManyToOne
@JoinColumn(name = "SUBMISSION_ID", referencedColumnName = "ID")
private Submission submission;
4

1 に答える 1

1

あなたのヒントは意味がありません、

@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_SIZE, value="1000"),
@QueryHint(name=QueryHints.QUERY_RESULTS_CACHE_EXPIRY, value="18000")

クエリ キャッシングを使用していると思われますが、そうではありません。CACHE_USAGE はクエリ キャッシュを有効にしませんが、メモリ内クエリを有効にします (キャッシュ全体でオブジェクトを検索します)。

クエリ キャッシュの使用を有効にするには、QueryHints.QUERY_RESULTS_CACHE = true にします。

CACHE_USAGE を削除します。CACHE_USAGE メモリ内クエリは、オブジェクト全体でのみサポートされており、パーツの選択はサポートされていません。インメモリ クエリを使用する場合は、オブジェクト全体をクエリしてから、必要な部分にアクセスします。

于 2013-05-07T13:59:52.933 に答える