您好我有一个命名查询定义如下,但是当我执行它时,它会重新调整整个对象,而不仅仅是我请求的字段。当我只想返回该对象的一列时,是否存在我遗漏的东西。提前致谢
@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;
答案 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内存中查询仅支持整个对象,不支持选择部件。如果要使用内存中查询,只需查询整个对象,然后访问所需的部分。