2013-05-07 3 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 для этого запроса является

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-компонентом, а не примитивным/String/Date, правильно? В этом случае вы получите объект «Представление», как было запрошено (позже вы сможете получить идентификатор из его атрибутов). Возможно, вы можете попробовать 'o.submission.id', если это то, что вы хотите. – SJuan76

+0

Да представление - это bean, но даже если я пытаюсь получить свойство non bean, оно все равно возвращает весь объект представления, а не только эту porperty. – user1107753

+0

Вы пробовали 'SELECT o.submission.theProperty ...'? – SJuan76

ответ

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

Смежные вопросы