0
我有一個關於Hibernate如何在與Criteria API一起使用時生成SQL的問題。我有一個名爲Mission的@Entity。每個任務都與一個客戶(任務已經創建)和一個資源(這是分配給這個任務的人)相關聯。當我查詢所有類似的任務列表:Hibernate SQL生成如何工作? (與Criteria API,setfirstResults和setMaxresult一起使用)
entityManager.getTransaction().begin();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Mission> criteriaQuery = criteriaBuilder.createQuery(Mission.class);
Root<Mission> mission = criteriaQuery.from(Mission.class);
...
criteriaQuery.select(mission);
TypedQuery<Mission> query = entityManager.createQuery(criteriaQuery);
missions = query.setFirstResult(firstResult).setMaxResults(maxResults).getResultList();
entityManager.getTransaction().commit();
看來,Hibernate會的maxResults查詢每個任務的。
Hibernate:
select
missionsc0_.ID_CLIENT as ID10_7_1_,
missionsc0_.ID_MISSION as ID1_1_,
missionsc0_.ID_MISSION as ID1_11_0_,
missionsc0_.active as active11_0_,
missionsc0_.ID_CLIENT as ID10_11_0_,
missionsc0_.CODE_ARTICLE as CODE3_11_0_,
missionsc0_.HAS_PERIODE as HAS4_11_0_,
missionsc0_.DESCRIPTION as DESCRIPT5_11_0_,
missionsc0_.END_DATE as END6_11_0_,
missionsc0_.LIBELLE as LIBELLE11_0_,
missionsc0_.ID_RESSOURCE as ID11_11_0_,
missionsc0_.START_DATE as START8_11_0_,
missionsc0_.VERSION as VERSION11_0_
from
MISSION missionsc0_
where
missionsc0_.ID_CLIENT=?
所以我的maxResults次此查詢。我認爲這隻會火ONE TIME喜歡的東西
SELECT * FROM Mission WHERE ... LIMIT 0, MaxResults
有人能向我解釋爲什麼它的產生所有這些疑問?我懷疑它會對整體表演產生影響。
非常感謝,
該應用程序由一個MySQL數據庫支持,我確信它存在LIMIT x OFFSET y語法。 – kaffein
Guyz, 其實我認爲這個問題可能是由於我的RequestFactory。我使用它從數據庫中獲取Mission列表,並且因爲Mission Entity與我的實體Client有多對一的關係,我必須使用「with(client)」調用我的RequestFactory查詢,以便客戶端在任務中引用對象也被初始化了......所以我猜,這就是爲什麼它會爲客戶端生成所有這些日誌。 – kaffein