2013-05-07 113 views
0

您好我有一個如下定義的namedquery,但是當我執行它時,它會重新調整整個對象而不僅僅是我請求的字段。當我只想返回該對象的一列時,是否有我缺少的東西。在此先感謝NamedQuery返回對象而不是列

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

})

它excecutes這個查詢的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 = ?)")) 

我已經定義了加入成爲folllows

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

我明白'o.submission'是一個bean,而不是一個原始類型/字符串/日期,是嗎?在這種情況下,您將按照要求獲得「提交」對象(稍後您可以從其屬性獲取該ID)。也許你可以嘗試'o.submission.id',如果這是你想要的。 – SJuan76 2013-05-07 10:42:59

+0

是提交是一個bean,但即使我試圖獲得一個非bean屬性,它仍然返回整個submissionrow對象,而不僅僅是那個porperty – user1107753 2013-05-07 11:22:12

+0

你試過'SELECT o.submission.theProperty ...'? – SJuan76 2013-05-07 11:36:12

回答

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內存查詢只支持整個對象,不支持選擇部分。如果你想使用內存查詢,只需查詢整個對象,然後訪問你想要的部分。

+0

你也可以記錄一個錯誤,以通過部分查詢支持內存查詢。 – James 2013-05-07 14:00:22

相關問題