Почему выполнение query.from несколько раз возвращает неверный счетчик?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему выполнение query.from несколько раз возвращает неверный счетчик?

Сообщение Anonymous »

Недавно я столкнулся с этим странным поведением, которое не могу объяснить.
Если да, то

Код: Выделить всё

public Long getAllUsersCount() {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery query = cb.createQuery(Long.class);

Root root = query.from(Userr.class);         // exp = 3; act = 3             exp = 2; act = 2
//Root root2 = query.from(Userr.class);      // exp = 3; act = 9 = 3^2       exp = 2; act = 6
//Root root3 = query.from(Userr.class);      // exp = 3; act = 27 = 3^3      exp = 2; act = 18

query.select(cb.count(root));

//query.where(cb.equal(root.get("name"), "josh"));

return entityManager.createQuery(query).getSingleResult();
}
Я правильно получаю 3 (ОЖИДАЕМОЕ = ФАКТИЧЕСКОЕ).
Когда я раскомментирую root2, я получаю 9, что равно 3 в квадрате.
Я правильно получаю 3 (ОЖИДАЕМОЕ = ФАКТИЧЕСКОЕ).
Когда я раскомментирую root2, я получаю 9, что равно 3 в квадрате.
p>
Более того, когда я также раскомментирую root3, я получаю 27, что равно 3 в кубе.
Теперь давайте прокомментируем root1 и root2< /code> еще раз, но раскомментируйте где.
При наличии только одного корня я правильно получаю 2 (ОЖИДАЕМОЕ = ФАКТИЧЕСКОЕ).
Когда я раскомментирую root2, я получаю 6.
А когда я также раскомментирую root3, я получаю 18.
Это данные, с которыми я работаю

Код: Выделить всё

INSERT INTO userr (id, name, email) VALUES
(1, 'josh', 'josh@a.com'),
(2, 'josh', 'josh@b.com'),
(3, 'coby', 'coby@a.com');
Похоже, что количество запросов увеличивается по мере увеличения количества запросов..
Я знаю, что мне следует использовать только один корень, но я просто хочу понять, почему так происходит. У вас есть идеи?
Тоже это происходит только на счет. Обычный выбор всегда возвращает правильные элементы, независимо от того, сколько раз я выполняю запрос.from.
Это демонстрационный проект, воспроизводящий проблему.

Подробнее здесь: https://stackoverflow.com/questions/790 ... rong-count
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»