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


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

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



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

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

да, конечно.
...
Рейтинг: 0 / 0
16.07.2013, 12:14:14
    #38332507
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
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
16.07.2013, 12:15:47
    #38332510
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
redwhite90,

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

Если кандидату(с id==2) добавить 4(например) скилла, то количество кандидатов кандидатов c id==2 в выборке будет равно 4.
...
Рейтинг: 0 / 0
16.07.2013, 12:25:59
    #38332530
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
redwhite90Если кандидату(с id==2) добавить 4(например) скилла, то количество кандидатов кандидатов c id==2 в выборке будет равно 4.
Потому-то хибер для EAGER делает OUTER JOIN. Покажи SQL log для обоих случаев.
...
Рейтинг: 0 / 0
16.07.2013, 12:38:30
    #38332550
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
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
16.07.2013, 12:46:28
    #38332573
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
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
16.07.2013, 13:23:15
    #38332667
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
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
16.07.2013, 13:23:46
    #38332669
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
авторEAGER в маппинге это не самая лучшая практика. Потом его не возможно будет поменять на lazy в отдельных случаях.
это временная мера
...
Рейтинг: 0 / 0
16.07.2013, 13:34:29
    #38332690
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
redwhite90вроде всё правильно написал:

Тут 14572086 ты пишешь что Criteria приводит к нескольким подзапросам, тогда как в HQL такого нет.
А вот тут: 14572553 - наоборот. HQL - куча запросов, Criteria - один запрос.
...
Рейтинг: 0 / 0
16.07.2013, 14:46:38
    #38332872
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
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
16.07.2013, 14:49:33
    #38332881
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
redwhite90перепроверил

Да, чего тут проверять? Теперь всё понятно. HQL сам по себе JOIN-ы не делает, если их явно не указать в запросе. Поэтому куча select-ов.
...
Рейтинг: 0 / 0
16.07.2013, 14:51:17
    #38332886
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
на выходе(без повторений):
автор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
16.07.2013, 14:53:46
    #38332892
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate. Разница между запросами
Blazkowiczredwhite90перепроверил

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

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

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

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

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


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

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

спасибо


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

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


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