Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему данные подгружаются 2 раза?(hibernate) / 10 сообщений из 10, страница 1 из 1
20.08.2013, 11:59:24
    #38371715
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
объект попадает в request таким образом
Код: java
1.
2.
3.
4.
5.
6.
@ModelAttribute(value = "vacancy")
	public Vacancy loadVacancy(@RequestParam(required = false) Integer idVacancy) {
		if(idVacancy == null)
			return null;
		return vacancyService.findById(idVacancy);
	}


связи в бд такие:

в промежуточной таблице(vacancy_status) 1 запись
в request 2 одинаковых элемента(две записи):

почему так может происходить?
...
Рейтинг: 0 / 0
20.08.2013, 12:05:37
    #38371728
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
вакансия:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@Entity
@Table(name = "vacancy")
@XmlRootElement(name="vacancy")

public class Vacancy {

	private List<VacancyStatus> statusList = new LinkedList<VacancyStatus>();

	@OneToMany(mappedBy = "vacancy", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	public List<VacancyStatus> getStatusList() {
		return statusList;
	}

	public void setStatusList(List<VacancyStatus> statusList) {
		this.statusList = statusList;
	}

}



status_for_vacancy
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Entity
@Table(name = "status_for_vacancy")
public class StatusForVacancy extends AbstractStatus {

	public StatusForVacancy() {
		super();
	}

	public StatusForVacancy(Integer id, String name) {
		super(id, name);
	}

}


Код: 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.
@MappedSuperclass
@XmlRootElement
public abstract class AbstractStatus {

	private Integer id;
	private String name;

	public AbstractStatus() {
		super();
	}
	
	public AbstractStatus(String name) {
		super();
		this.name = name;
	}

	public AbstractStatus(Integer id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column (name ="id")
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Column(name = "name")
	@NotEmpty
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}



и для промежуточной таблицы

Код: 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.
@Entity
@Table(name = "vacancy_status")
public class VacancyStatus extends AbstractHistoryStatus {

	private Vacancy vacancy;
	private StatusForVacancy status;
	
	public VacancyStatus() {
		super();
	}

	public VacancyStatus(Integer id, User author, Date date, 
			Vacancy vacancy, StatusForVacancy status) {
		super(id, author, date);
		this.vacancy = vacancy;
		this.status = status;
	}


	@ManyToOne
	@JoinColumn(name = "vacancy_id")
	public Vacancy getVacancy() {
		return vacancy;
	}

	public void setVacancy(Vacancy vacancy) {
		this.vacancy = vacancy;
	}

	@ManyToOne
	@JoinColumn(name = "status_id")
	public StatusForVacancy getStatus() {
		return status;
	}

	public void setStatus(StatusForVacancy status) {
		this.status = status;
	}
}



Код: 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.
@MappedSuperclass
public abstract class AbstractHistoryStatus {

	private Integer id;
	private User author;
	private Date date;


	public AbstractHistoryStatus() {
	}

	public AbstractHistoryStatus(Integer id, User author, Date date) {
		super();
		this.id = id;
		this.author = author;
		this.date = date;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

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

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

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

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

}
...
Рейтинг: 0 / 0
20.08.2013, 18:28:29
    #38372436
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
причем
Код: xml
1.
hibernate.hbm2ddl.auto=update



а если попробовать в конфигах указать новую схему, а потом данные руками добавить - всё работает правильно
...
Рейтинг: 0 / 0
21.08.2013, 13:50:31
    #38373250
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
ошибся.если добавить ровно те же данные, что и в старую базу, то всё точно также работать будет(дублирование будет)

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

Ситуация немного прояснилась:


везде eager инициализация.

Если в таблице note записей больше 0, то количество продублированных записей в vacancy_status равно количеству записей в note.
P.S. я гружу из базы сущность Vacancy по id
лог:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Hibernate: select vacancy0_.id as id1_12_15_, vacancy0_.author_id as author5_12_15_, vacancy0_.creation_date as creation2_12_15_, vacancy0_.description as descript3_12_15_, vacancy0_.name as name4_12_15_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, candidates2_.vacancy_id as vacancy2_12_17_, candidate3_.id as candidat1_4_17_, candidate3_.id as id1_1_1_, candidate3_.name as name2_1_1_, candidate3_.surname as surname3_1_1_, candidate3_.author_id as author7_1_1_, candidate3_.creation_date as creation4_1_1_, candidate3_.phone as phone5_1_1_, candidate3_.cv_url as cv6_1_1_, user4_.id as id1_0_2_, user4_.name as name2_0_2_, user4_.surname as surname3_0_2_, user4_.login as login4_0_2_, user4_.password as password5_0_2_, comments5_.vacancy_id as vacancy6_12_18_, comments5_.id as id1_8_18_, comments5_.id as id1_8_3_, comments5_.author_id as author4_8_3_, comments5_.candidate_id as candidat5_8_3_, comments5_.creation_date as creation2_8_3_, comments5_.text as text3_8_3_, comments5_.vacancy_id as vacancy6_8_3_, user6_.id as id1_0_4_, user6_.name as name2_0_4_, user6_.surname as surname3_0_4_, user6_.login as login4_0_4_, user6_.password as password5_0_4_, candidate7_.id as id1_1_5_, candidate7_.name as name2_1_5_, candidate7_.surname as surname3_1_5_, candidate7_.author_id as author7_1_5_, candidate7_.creation_date as creation4_1_5_, candidate7_.phone as phone5_1_5_, candidate7_.cv_url as cv6_1_5_, events8_.vacancy_id as vacancy10_12_19_, events8_.id as id1_5_19_, events8_.id as id1_5_6_, events8_.author_id as author6_5_6_, events8_.candidate_id as candidat7_5_6_, events8_.creation_date as creation2_5_6_, events8_.description as descript3_5_6_, events8_.event_date as event4_5_6_, events8_.event_status_id as event8_5_6_, events8_.event_type_id as event9_5_6_, events8_.name as name5_5_6_, events8_.vacancy_id as vacancy10_5_6_, user9_.id as id1_0_7_, user9_.name as name2_0_7_, user9_.surname as surname3_0_7_, user9_.login as login4_0_7_, user9_.password as password5_0_7_, candidate10_.id as id1_1_8_, candidate10_.name as name2_1_8_, candidate10_.surname as surname3_1_8_, candidate10_.author_id as author7_1_8_, candidate10_.creation_date as creation4_1_8_, candidate10_.phone as phone5_1_8_, candidate10_.cv_url as cv6_1_8_, eventstatu11_.id as id1_6_9_, eventstatu11_.name as name2_6_9_, eventtype12_.id as id1_7_10_, eventtype12_.name as name2_7_10_, skills13_.vacancy_id as vacancy1_12_20_, skill14_.id as skill2_13_20_, skill14_.id as id1_9_11_, skill14_.name as name2_9_11_, statuslist15_.vacancy_id as vacancy5_12_21_, statuslist15_.id as id1_14_21_, statuslist15_.id as id1_14_12_, statuslist15_.author_id as author3_14_12_, statuslist15_.creation_date as creation2_14_12_, statuslist15_.status_for_vacancy_id as status4_14_12_, statuslist15_.vacancy_id as vacancy5_14_12_, user16_.id as id1_0_13_, user16_.name as name2_0_13_, user16_.surname as surname3_0_13_, user16_.login as login4_0_13_, user16_.password as password5_0_13_, statusforv17_.id as id1_11_14_, statusforv17_.name as name2_11_14_ from vacancy vacancy0_ left outer join author user1_ on vacancy0_.author_id=user1_.id left outer join candidate_vacancy candidates2_ on vacancy0_.id=candidates2_.vacancy_id left outer join candidate candidate3_ on candidates2_.candidate_id=candidate3_.id left outer join author user4_ on candidate3_.author_id=user4_.id left outer join note comments5_ on vacancy0_.id=comments5_.vacancy_id left outer join author user6_ on comments5_.author_id=user6_.id left outer join candidate candidate7_ on comments5_.candidate_id=candidate7_.id left outer join event events8_ on vacancy0_.id=events8_.vacancy_id left outer join author user9_ on events8_.author_id=user9_.id left outer join candidate candidate10_ on events8_.candidate_id=candidate10_.id left outer join event_status eventstatu11_ on events8_.event_status_id=eventstatu11_.id left outer join event_type eventtype12_ on events8_.event_type_id=eventtype12_.id left outer join vacancy_skill skills13_ on vacancy0_.id=skills13_.vacancy_id left outer join skill skill14_ on skills13_.skill_id=skill14_.id left outer join vacancy_status statuslist15_ on vacancy0_.id=statuslist15_.vacancy_id left outer join author user16_ on statuslist15_.author_id=user16_.id left outer join status_for_vacancy statusforv17_ on statuslist15_.status_for_vacancy_id=statusforv17_.id where vacancy0_.id=?
Hibernate: select vacancies0_.candidate_id as candidat1_1_2_, vacancies0_.vacancy_id as vacancy2_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_.login as login4_0_1_, user2_.password as password5_0_1_ from candidate_vacancy vacancies0_ inner join vacancy vacancy1_ on vacancies0_.vacancy_id=vacancy1_.id left outer join author user2_ on vacancy1_.author_id=user2_.id where vacancies0_.candidate_id=?
Hibernate: select statuslist0_.vacancy_id as vacancy5_12_3_, statuslist0_.id as id1_14_3_, statuslist0_.id as id1_14_2_, statuslist0_.author_id as author3_14_2_, statuslist0_.creation_date as creation2_14_2_, statuslist0_.status_for_vacancy_id as status4_14_2_, statuslist0_.vacancy_id as vacancy5_14_2_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, statusforv2_.id as id1_11_1_, statusforv2_.name as name2_11_1_ from vacancy_status statuslist0_ left outer join author user1_ on statuslist0_.author_id=user1_.id left outer join status_for_vacancy statusforv2_ on statuslist0_.status_for_vacancy_id=statusforv2_.id where statuslist0_.vacancy_id=?
Hibernate: select skills0_.vacancy_id as vacancy1_12_1_, skills0_.skill_id as skill2_13_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from vacancy_skill skills0_ inner join skill skill1_ on skills0_.skill_id=skill1_.id where skills0_.vacancy_id=?
Hibernate: select events0_.vacancy_id as vacancy10_12_6_, events0_.id as id1_5_6_, events0_.id as id1_5_5_, events0_.author_id as author6_5_5_, events0_.candidate_id as candidat7_5_5_, events0_.creation_date as creation2_5_5_, events0_.description as descript3_5_5_, events0_.event_date as event4_5_5_, events0_.event_status_id as event8_5_5_, events0_.event_type_id as event9_5_5_, events0_.name as name5_5_5_, events0_.vacancy_id as vacancy10_5_5_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, candidate2_.id as id1_1_1_, candidate2_.name as name2_1_1_, candidate2_.surname as surname3_1_1_, candidate2_.author_id as author7_1_1_, candidate2_.creation_date as creation4_1_1_, candidate2_.phone as phone5_1_1_, candidate2_.cv_url as cv6_1_1_, user3_.id as id1_0_2_, user3_.name as name2_0_2_, user3_.surname as surname3_0_2_, user3_.login as login4_0_2_, user3_.password as password5_0_2_, eventstatu4_.id as id1_6_3_, eventstatu4_.name as name2_6_3_, eventtype5_.id as id1_7_4_, eventtype5_.name as name2_7_4_ from event events0_ left outer join author user1_ on events0_.author_id=user1_.id left outer join candidate candidate2_ on events0_.candidate_id=candidate2_.id left outer join author user3_ on candidate2_.author_id=user3_.id left outer join event_status eventstatu4_ on events0_.event_status_id=eventstatu4_.id left outer join event_type eventtype5_ on events0_.event_type_id=eventtype5_.id where events0_.vacancy_id=?
Hibernate: select comments0_.vacancy_id as vacancy6_12_4_, comments0_.id as id1_8_4_, comments0_.id as id1_8_3_, comments0_.author_id as author4_8_3_, comments0_.candidate_id as candidat5_8_3_, comments0_.creation_date as creation2_8_3_, comments0_.text as text3_8_3_, comments0_.vacancy_id as vacancy6_8_3_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, candidate2_.id as id1_1_1_, candidate2_.name as name2_1_1_, candidate2_.surname as surname3_1_1_, candidate2_.author_id as author7_1_1_, candidate2_.creation_date as creation4_1_1_, candidate2_.phone as phone5_1_1_, candidate2_.cv_url as cv6_1_1_, user3_.id as id1_0_2_, user3_.name as name2_0_2_, user3_.surname as surname3_0_2_, user3_.login as login4_0_2_, user3_.password as password5_0_2_ from note comments0_ left outer join author user1_ on comments0_.author_id=user1_.id left outer join candidate candidate2_ on comments0_.candidate_id=candidate2_.id left outer join author user3_ on candidate2_.author_id=user3_.id where comments0_.vacancy_id=?
Hibernate: select candidates0_.vacancy_id as vacancy2_12_2_, candidates0_.candidate_id as candidat1_4_2_, candidate1_.id as id1_1_0_, candidate1_.name as name2_1_0_, candidate1_.surname as surname3_1_0_, candidate1_.author_id as author7_1_0_, candidate1_.creation_date as creation4_1_0_, candidate1_.phone as phone5_1_0_, candidate1_.cv_url as cv6_1_0_, user2_.id as id1_0_1_, user2_.name as name2_0_1_, user2_.surname as surname3_0_1_, user2_.login as login4_0_1_, user2_.password as password5_0_1_ from candidate_vacancy candidates0_ inner join candidate candidate1_ on candidates0_.candidate_id=candidate1_.id left outer join author user2_ on candidate1_.author_id=user2_.id where candidates0_.vacancy_id=?
Hibernate: select statuslist0_.candidate_id as candidat4_1_3_, statuslist0_.id as id1_3_3_, statuslist0_.id as id1_3_2_, statuslist0_.author_id as author3_3_2_, statuslist0_.creation_date as creation2_3_2_, statuslist0_.candidate_id as candidat4_3_2_, statuslist0_.status_for_candidate_id as status5_3_2_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, statusforc2_.id as id1_10_1_, statusforc2_.name as name2_10_1_ from candidate_status statuslist0_ left outer join author user1_ on statuslist0_.author_id=user1_.id left outer join status_for_candidate statusforc2_ on statuslist0_.status_for_candidate_id=statusforc2_.id where statuslist0_.candidate_id=?
Hibernate: select skills0_.candidate_id as candidat1_1_1_, skills0_.skills_id as skills2_2_1_, skill1_.id as id1_9_0_, skill1_.name as name2_9_0_ from candidate_skill skills0_ inner join skill skill1_ on skills0_.skills_id=skill1_.id where skills0_.candidate_id=?
Hibernate: select events0_.candidate_id as candidat7_1_6_, events0_.id as id1_5_6_, events0_.id as id1_5_5_, events0_.author_id as author6_5_5_, events0_.candidate_id as candidat7_5_5_, events0_.creation_date as creation2_5_5_, events0_.description as descript3_5_5_, events0_.event_date as event4_5_5_, events0_.event_status_id as event8_5_5_, events0_.event_type_id as event9_5_5_, events0_.name as name5_5_5_, events0_.vacancy_id as vacancy10_5_5_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, eventstatu2_.id as id1_6_1_, eventstatu2_.name as name2_6_1_, eventtype3_.id as id1_7_2_, eventtype3_.name as name2_7_2_, vacancy4_.id as id1_12_3_, vacancy4_.author_id as author5_12_3_, vacancy4_.creation_date as creation2_12_3_, vacancy4_.description as descript3_12_3_, vacancy4_.name as name4_12_3_, user5_.id as id1_0_4_, user5_.name as name2_0_4_, user5_.surname as surname3_0_4_, user5_.login as login4_0_4_, user5_.password as password5_0_4_ from event events0_ left outer join author user1_ on events0_.author_id=user1_.id left outer join event_status eventstatu2_ on events0_.event_status_id=eventstatu2_.id left outer join event_type eventtype3_ on events0_.event_type_id=eventtype3_.id left outer join vacancy vacancy4_ on events0_.vacancy_id=vacancy4_.id left outer join author user5_ on vacancy4_.author_id=user5_.id where events0_.candidate_id=?
Hibernate: select comments0_.candidate_id as candidat5_1_4_, comments0_.id as id1_8_4_, comments0_.id as id1_8_3_, comments0_.author_id as author4_8_3_, comments0_.candidate_id as candidat5_8_3_, comments0_.creation_date as creation2_8_3_, comments0_.text as text3_8_3_, comments0_.vacancy_id as vacancy6_8_3_, user1_.id as id1_0_0_, user1_.name as name2_0_0_, user1_.surname as surname3_0_0_, user1_.login as login4_0_0_, user1_.password as password5_0_0_, vacancy2_.id as id1_12_1_, vacancy2_.author_id as author5_12_1_, vacancy2_.creation_date as creation2_12_1_, vacancy2_.description as descript3_12_1_, vacancy2_.name as name4_12_1_, user3_.id as id1_0_2_, user3_.name as name2_0_2_, user3_.surname as surname3_0_2_, user3_.login as login4_0_2_, user3_.password as password5_0_2_ from note comments0_ left outer join author user1_ on comments0_.author_id=user1_.id left outer join vacancy vacancy2_ on comments0_.vacancy_id=vacancy2_.id left outer join author user3_ on vacancy2_.author_id=user3_.id where comments0_.candidate_id=?
...
Рейтинг: 0 / 0
21.08.2013, 16:50:26
    #38373629
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
если в клиенте бд вызвать запросы из лога:
[img=http://s1.ipicture.ru/uploads/20130821/MtH6UUgZ.jpg
]
если в клиенте бд вызвать запросы из лога
...
Рейтинг: 0 / 0
21.08.2013, 16:51:04
    #38373630
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
...
Рейтинг: 0 / 0
21.08.2013, 16:59:17
    #38373640
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
всё сработает если заменить коллекцию на Set и переопределеить equals+hashcode, но это всё таки борьба с симптомами, а не с первопричиной.


неужели никто не сталкивался?
...
Рейтинг: 0 / 0
21.08.2013, 17:00:13
    #38373643
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)


вот та картинка что не грузится
...
Рейтинг: 0 / 0
21.08.2013, 17:54:36
    #38373739
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
Дупликаты, которые видны в дебаге вообще ничем не отличаются?
...
Рейтинг: 0 / 0
21.08.2013, 20:06:59
    #38373889
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему данные подгружаются 2 раза?(hibernate)
Blazkowicz,

абсолютно
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему данные подгружаются 2 раза?(hibernate) / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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