NamedQuery返回对象而不是列

时间:2013-05-07 10:40:41

标签: jpa jpa-2.0 named-query

您好我有一个命名查询定义如下,但是当我执行它时,它会重新调整整个对象,而不仅仅是我请求的字段。当我只想返回该对象的一列时,是否存在我遗漏的东西。提前致谢

@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")
          })

})

它对此查询的优势是

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 = ?)"))

我已将连接定义为folllows

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

1 个答案:

答案 0 :(得分: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内存中查询仅支持整个对象,不支持选择部件。如果要使用内存中查询,只需查询整个对象,然后访问所需的部分。