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 回答