Решил почитать один блог
https://vladmihalcea.com/whats-new-in-jpa-2-2-stream-the-result-of-a-query-execution/
В нем рассказывается о том как извлечь часть данных из бд в том числе при помощи setHint(QueryHints.HINT_FETCH_SIZE, ?)
. И у меня возникли вопросы по поведению примеров.
В этом примере у поведение легко прогнозируемо, мы получим все строки и возьмем часть от них:
List<Post> posts = doInJPA(entityManager -> {
try (Stream<Post> postStream = entityManager
.createQuery(
"select p " +
"from Post p " +
"order by p.createdOn desc", Post.class)
.unwrap(Query.class)
.stream()
) {
return postStream.limit(50).collect(Collectors.toList());
}
});
Но в этом примере поведение не понятно.
List<String> executionPlanLines = doInJPA(entityManager -> {
try (Stream<String> postStream = entityManager
.createNativeQuery(
"EXPLAIN ANALYZE " +
"SELECT p " +
"FROM post p " +
"ORDER BY p.created_on DESC")
.setHint(QueryHints.HINT_FETCH_SIZE, 50)
.unwrap(Query.class)
.getResultStream()
) {
return postStream.collect(Collectors.toList());
}
});
В результате будем иметь следующий план запроса.
Execution plan: Sort (cost=65.53..66.83 rows=518 width=564) (actual time=5.690..6.013 rows=5000 loops=1)
Sort Key: created_on
Sort Method: quicksort Memory: 850kB
-> Seq Scan on post p (cost=0.00..42.18 rows=518 width=564) (actual time=0.024..1.725 rows=5000 loops=1)
Почему он выбирает все 5000 и при этом игнорирует setHint(QueryHints.HINT_FETCH_SIZE, 50)?
В одном фрагменте есть кнопки, по нажатию которых открывается другой
Мне надо по нажатию на кнопку в быстрых настройках (Tileservice) открыть AlertDialog, но его не открыть без активити, мне не надо, чтобы открывалось активити,...
С одним все работает, если сложить, то не хочет
В TextView у меня выводится несколько строковых ресурсов: