powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate. Разница между запросами
22 сообщений из 22, страница 1 из 1
Hibernate. Разница между запросами
    #38332428
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы выбрать данные из таблицы использовал такой запрос
Код: java
1.
.createCriteria(Candidate.class)


после того, как у таблицы появились зависимые - количество повторяемых строк стало равно количеству записей в зависимых таблицах. На мой взгляд какое-то странное поведение. почему так происходит?

пришлось писать так:
Код: java
1.
.createQuery("from Candidate").list();



хотя всегда считал, что это одно и то же.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332437
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вторая строка запускае выборку. А первая нет. Какие-то детали ты опустил. Там тоже .createCriteria(Candidate.class).list() ?
Какие конкретно запросы повторяются и какой маппинг на зависимости? Похоже что проблема N+1.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332449
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Когда используешь Criteria API в расчет берется конфигурация, всякие FeatchJoin, EagerJoin.
Когда используешь hql, то используется только что написано в самом запросе (конфигурация не влияет).
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332498
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz Там тоже .createCriteria(Candidate.class).list() ?

да, конечно.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332507
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczКакие конкретно запросы повторяются и какой маппинг на зависимости?.
BlazkowiczПохоже что проблема N+1.
не исключено

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
@Repository("candidateDao")
public class CandidateDaoImpl implements CandidateDao {

	
	@Override
	public List<Candidate> getAll() {
		Session session = sessionFactory.openSession();
		try {
			session.beginTransaction();
			List<Candidate> candidates = (List<Candidate>) session
					.createQuery("from Candidate").list();
					//.createCriteria(Candidate.class).uniqueResult();//.list();
			session.getTransaction().commit();
			return candidates;
		} catch (HibernateException e) {
			 logger.warn("operation was not completed " + e);
			return null;
		} finally {
			session.close();
		}
	}

	
}




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
@Entity
@Table(name = "candidate")
@XmlRootElement(name = "candidate")
public class Candidate extends Person {

	private String phone;
	private Date date;
	private User author;
	private String resumeUrl;
	private Set<Vacancy> vacancies = new HashSet<Vacancy>();
	private Set<Skill> skills = new HashSet<Skill>();
	//private Set<Note> comments = new HashSet<Note>();
	
	public Candidate() {
		super();
	}
	
//	@OneToMany(mappedBy = "candidate")
//	public Set<Note> getComments() {
//		return comments;
//	}
//
//	public void setComments(Set<Note> comments) {
//		this.comments = comments;
//	}

	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "candidate_skill", joinColumns = @JoinColumn(name = "candidate_id"), inverseJoinColumns = @JoinColumn(name = "skill_id"))
	
	public Set<Skill> getSkills() {
		return skills;
	}

	public void setSkills(Set<Skill> skills) {
		this.skills = skills;
	}

	public Candidate(Integer id, String name, String surname, String phone,
			Date date, User author) {
		super(name, surname);
		this.phone = phone;
		this.date = date;
		this.author = author;
	}

	@Column(name = "phone")
	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	@Column(name = "creation_date")
	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	@ManyToOne
	public User getAuthor() {
		return author;
	}

	public void setAuthor(User author) {
		this.author = author;
	}

	@Column(name = "cv_url")
	public String getResumeUrl() {
		return resumeUrl;
	}

	public void setResumeUrl(String resumeUrl) {
		this.resumeUrl = resumeUrl;
	}

	@ManyToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "candidate_vacancy", joinColumns = @JoinColumn(name = "vacancy_id"), inverseJoinColumns = @JoinColumn(name = "candidate_id"))
	public Set<Vacancy> getVacancies() {
		return Collections.unmodifiableSet(vacancies);
	}

	public void setVacancies(Set<Vacancy> vacancies) {
		this.vacancies = vacancies;
	}

}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Entity
@Table(name = "skill")
@XmlRootElement
@XmlSeeAlso(value=AbstractHistoryStatus.class)
public class Skill extends AbstractStatus{
	public Skill() {
		super();
	}

	public Skill(String name) {
		super(name);
	}
	
}
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332510
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Тогда какие-то важные детали здесь утеряны. Не должно быть особой разницы.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332515
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и с каким свойством проблема? vacancies или skills?
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332516
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Если кандидату(с id==2) добавить 4(например) скилла, то количество кандидатов кандидатов c id==2 в выборке будет равно 4.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332530
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Если кандидату(с id==2) добавить 4(например) скилла, то количество кандидатов кандидатов c id==2 в выборке будет равно 4.
Потому-то хибер для EAGER делает OUTER JOIN. Покажи SQL log для обоих случаев.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332550
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
HQL
[quote авторHibernate: select candidate0_.id as id1_1_, candidate0_.name as name2_1_, candidate0_.surname as surname3_1_, candidate0_.author_id as author7_1_, candidate0_.creation_date as creation4_1_, candidate0_.phone as phone5_1_, candidate0_.cv_url as cv6_1_ from candidate candidate0_
Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.surname as surname3_0_0_, user0_.password as password4_0_0_ from author user0_ where user0_.id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
[/quote]
CRITERIA
авторHibernate: select this_.id as id1_1_2_, this_.name as name2_1_2_, this_.surname as surname3_1_2_, this_.author_id as author7_1_2_, this_.creation_date as creation4_1_2_, this_.phone as phone5_1_2_, this_.cv_url as cv6_1_2_, user2_.id as id1_0_0_, user2_.name as name2_0_0_, user2_.surname as surname3_0_0_, user2_.password as password4_0_0_, skills3_.candidate_id as candidat1_1_4_, skill4_.id as skill2_2_4_, skill4_.id as id1_9_1_, skill4_.name as name2_9_1_ from candidate this_ left outer join author user2_ on this_.author_id=user2_.id left outer join candidate_skill skills3_ on this_.id=skills3_.candidate_id left outer join skill skill4_ on skills3_.skill_id=skill4_.id
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332573
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Тогда ты всё напутал в первом посте.
Похоже что HQL не делает JOIN самостоятельно, если его не указать в запросе. Поэтому он делает SELECT from Candidate, а затем кучу дополнительных SELECT для skills, так как в маппинге указан fetch EAGER.
Criteria API из EAGER делает OUTER JOIN. Об этом можно прочитать в мануале.

Тут немного коментариев и ссылок.
http://stackoverflow.com/questions/3516873/hql-fetch-join-collections-from-eager-table

EAGER в маппинге это не самая лучшая практика. Потом его не возможно будет поменять на lazy в отдельных случаях.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332667
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
вроде всё правильно написал:
состояние бд:






.createQuery("from Candidate").list();
результат:
автор<list>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>2</id>
<name>erwerwe</name>
<surname>888888888888888888888888888888888888888888888888</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<skills>
<id>1</id>
<name>skill1</name>
</skills>
<skills>
<id>2</id>
<name>skill2</name>
</skills>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>3</id>
<name>John</name>
<surname>Snow</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<date>2013-07-11T10:44:27.397+04:00</date>
<phone>33-33-33</phone>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>4</id>
<name>777</name>
<surname>777</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>5</id>
<name>777</name>
<surname>777</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>6</id>
<name>John</name>
<surname>Snow</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<date>2013-07-16T12:30:42.727+04:00</date>
<phone>33-33-33</phone>
</element>
</list>
.createCriteria(Candidate.class).list();
результат:
автор<list>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>2</id>
<name>erwerwe</name>
<surname>888888888888888888888888888888888888888888888888</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<skills>
<id>2</id>
<name>skill2</name>
</skills>
<skills>
<id>1</id>
<name>skill1</name>
</skills>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>2</id>
<name>erwerwe</name>
<surname>888888888888888888888888888888888888888888888888</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<skills>
<id>2</id>
<name>skill2</name>
</skills>
<skills>
<id>1</id>
<name>skill1</name>
</skills>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>3</id>
<name>John</name>
<surname>Snow</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<date>2013-07-11T10:44:27.397+04:00</date>
<phone>33-33-33</phone>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>4</id>
<name>777</name>
<surname>777</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>5</id>
<name>777</name>
<surname>777</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>6</id>
<name>John</name>
<surname>Snow</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<date>2013-07-16T12:30:42.727+04:00</date>
<phone>33-33-33</phone>
</element>
</list>

P.S. это результат вызова getAll метода
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332669
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторEAGER в маппинге это не самая лучшая практика. Потом его не возможно будет поменять на lazy в отдельных случаях.
это временная мера
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332690
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90вроде всё правильно написал:

Тут 14572086 ты пишешь что Criteria приводит к нескольким подзапросам, тогда как в HQL такого нет.
А вот тут: 14572553 - наоборот. HQL - куча запросов, Criteria - один запрос.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332872
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90вроде всё правильно написал:

Тут 14572086 ты пишешь что Criteria приводит к нескольким подзапросам, тогда как в HQL такого нет.
А вот тут: 14572553 - наоборот. HQL - куча запросов, Criteria - один запрос.

перепроверил
это HQL(.createQuery("from Candidate").list();):
авторHibernate: select candidate0_.id as id1_1_, candidate0_.name as name2_1_, candidate0_.surname as surname3_1_, candidate0_.author_id as author7_1_, candidate0_.creation_date as creation4_1_, candidate0_.phone as phone5_1_, candidate0_.cv_url as cv6_1_ from candidate candidate0_
Hibernate: select user0_.id as id1_0_0_, user0_.name as name2_0_0_, user0_.surname as surname3_0_0_, user0_.password as password4_0_0_ from author user0_ where user0_.id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skill_id as skill2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select vacancies0_.vacancy_id as vacancy1_1_2_, vacancies0_.candidate_id as candidat2_4_2_, vacancy1_.id as id1_12_0_, vacancy1_.author_id as author5_12_0_, vacancy1_.creation_date as creation2_12_0_, vacancy1_.description as descript3_12_0_, vacancy1_.name as name4_12_0_, user2_.id as id1_0_1_, user2_.name as name2_0_1_, user2_.surname as surname3_0_1_, user2_.password as password4_0_1_ from candidate_vacancy vacancies0_ inner join vacancy vacancy1_ on vacancies0_.candidate_id=vacancy1_.id left outer join author user2_ on vacancy1_.author_id=user2_.id where vacancies0_.vacancy_id=?
Hibernate: select vacancies0_.vacancy_id as vacancy1_1_2_, vacancies0_.candidate_id as candidat2_4_2_, vacancy1_.id as id1_12_0_, vacancy1_.author_id as author5_12_0_, vacancy1_.creation_date as creation2_12_0_, vacancy1_.description as descript3_12_0_, vacancy1_.name as name4_12_0_, user2_.id as id1_0_1_, user2_.name as name2_0_1_, user2_.surname as surname3_0_1_, user2_.password as password4_0_1_ from candidate_vacancy vacancies0_ inner join vacancy vacancy1_ on vacancies0_.candidate_id=vacancy1_.id left outer join author user2_ on vacancy1_.author_id=user2_.id where vacancies0_.vacancy_id=?
Hibernate: select vacancies0_.vacancy_id as vacancy1_1_2_, vacancies0_.candidate_id as candidat2_4_2_, vacancy1_.id as id1_12_0_, vacancy1_.author_id as author5_12_0_, vacancy1_.creation_date as creation2_12_0_, vacancy1_.description as descript3_12_0_, vacancy1_.name as name4_12_0_, user2_.id as id1_0_1_, user2_.name as name2_0_1_, user2_.surname as surname3_0_1_, user2_.password as password4_0_1_ from candidate_vacancy vacancies0_ inner join vacancy vacancy1_ on vacancies0_.candidate_id=vacancy1_.id left outer join author user2_ on vacancy1_.author_id=user2_.id where vacancies0_.vacancy_id=?
Hibernate: select vacancies0_.vacancy_id as vacancy1_1_2_, vacancies0_.candidate_id as candidat2_4_2_, vacancy1_.id as id1_12_0_, vacancy1_.author_id as author5_12_0_, vacancy1_.creation_date as creation2_12_0_, vacancy1_.description as descript3_12_0_, vacancy1_.name as name4_12_0_, user2_.id as id1_0_1_, user2_.name as name2_0_1_, user2_.surname as surname3_0_1_, user2_.password as password4_0_1_ from candidate_vacancy vacancies0_ inner join vacancy vacancy1_ on vacancies0_.candidate_id=vacancy1_.id left outer join author user2_ on vacancy1_.author_id=user2_.id where vacancies0_.vacancy_id=?
Hibernate: select vacancies0_.vacancy_id as vacancy1_1_2_, vacancies0_.candidate_id as candidat2_4_2_, vacancy1_.id as id1_12_0_, vacancy1_.author_id as author5_12_0_, vacancy1_.creation_date as creation2_12_0_, vacancy1_.description as descript3_12_0_, vacancy1_.name as name4_12_0_, user2_.id as id1_0_1_, user2_.name as name2_0_1_, user2_.surname as surname3_0_1_, user2_.password as password4_0_1_ from candidate_vacancy vacancies0_ inner join vacancy vacancy1_ on vacancies0_.candidate_id=vacancy1_.id left outer join author user2_ on vacancy1_.author_id=user2_.id where vacancies0_.vacancy_id=?
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332881
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90перепроверил

Да, чего тут проверять? Теперь всё понятно. HQL сам по себе JOIN-ы не делает, если их явно не указать в запросе. Поэтому куча select-ов.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332886
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на выходе(без повторений):
авторThis XML file does not appear to have any style information associated with it. The document tree is shown below.
<list>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>2</id>
<name>erwerwe</name>
<surname>888888888888888888888888888888888888888888888888</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<skills>
<id>2</id>
<name>skill2</name>
</skills>
<skills>
<id>1</id>
<name>skill1</name>
</skills>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>3</id>
<name>John</name>
<surname>Snow</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<date>2013-07-11T10:44:27.397+04:00</date>
<phone>33-33-33</phone>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>4</id>
<name>777</name>
<surname>777</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>5</id>
<name>777</name>
<surname>777</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
</element>
<element xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:type="candidate">
<id>6</id>
<name>John</name>
<surname>Snow</surname>
<author>
<id>1</id>
<name>author777</name>
<surname>author777</surname>
</author>
<date>2013-07-16T12:30:42.727+04:00</date>
<phone>33-33-33</phone>
</element>
</list>
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332892
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90перепроверил

Да, чего тут проверять? Теперь всё понятно. HQL сам по себе JOIN-ы не делает, если их явно не указать в запросе. Поэтому куча select-ов.

получается, что так.

а нельзя CRITERIA сделать без join-ов?

я просто думал, что все эти criteria, sql, hql самодостаточны и всё можно из них получить
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332894
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
без их композиции
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90а нельзя CRITERIA сделать без join-ов?

Можно.
Criteria.setFetchMode("skills", FetchMode.КАКОЙ_НАДА);
Только возможно Eager в маппинге мешать будет.


redwhite90 я просто думал, что все эти criteria, sql, hql самодостаточны и всё можно из них получить
Слова знакомые, а что хотел сказать - не понятно.
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332942
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90а нельзя CRITERIA сделать без join-ов?

Можно.
Criteria.setFetchMode("skills", FetchMode.КАКОЙ_НАДА);
Только возможно Eager в маппинге мешать будет.

спасибо


redwhite90 я просто думал, что все эти criteria, sql, hql самодостаточны и всё можно из них получить
Слова знакомые, а что хотел сказать - не понятно.[/quot]

имелось ввиду, что используя отдельно только sql(либо hql, либо criteria) можно сделать любой запрос к БД. То есть мощность этих инструментов одинаковая, только иногда в hql надо меньше буков писать...
...
Рейтинг: 0 / 0
Hibernate. Разница между запросами
    #38332955
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90имелось ввиду, что используя отдельно только sql(либо hql, либо criteria) можно сделать любой запрос к БД. То есть мощность этих инструментов одинаковая, только иногда в hql надо меньше буков писать...
Не совсем так. Criteria API нужен там где запрос приходится строить динамически. Обычно это поиск с кучей всевозможных опциональных параметров.
HQL писать проще, но он совершенно статичный. Из кода его стоит выносить в Named Query.
А dynamic association fetching это просто раздел мануала, который стоит освоить как для HQL, так и для Criteria API.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate. Разница между запросами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]