powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка В Хибернейте вставленные записи отсоединены
23 сообщений из 23, страница 1 из 1
Ошибка В Хибернейте вставленные записи отсоединены
    #39266748
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток.
Вот такой код ошибки

Код: java
1.
Multiple representations of the same entity [data.model.User#50] are being merged. Detached: [data.model.User@75c01cdc];



Появляется она переодически когда сохраняю данные. Но иногда мой код отрабатывает правильно иногда нет. В чем причина?

Гуглил довольно много, поставил последнюю версию Spring Jpa Data (Spring Boot) вместе с Hibernate 5 помогло на пару запусков потом опять.

На стековерфлоу и других ресурсах очень противоречивая инфа. Может кто лично сталкивался?
Не исключаю ошибку маппинга

Вот сам код

Сильно не переиминовываю ибо переименовывать много.

Код: 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.
	
		Vorgang vorgang;
		
		AKKFile akkFile;
		
		if (isTest)
		{
			vorgang = testVorgang;
			akkFile = testAkkFile;
		}
		else
		{
		  Benutzer benutzer = userRepository.findByLogin(getView().getUI().getSession().getAttribute("user").toString());
			
		  vorgang = getView().getVorgang();	  
		  vorgang.setAkkFile(new AKKFile());
		  akkFile = vorgang.getAkkFile();
		  akkFile.setFilename(filePath);
		  akkFile.setUploader("USERNAME");
                  // эту строку комменчу ибл есть двойное подчинение но что так что эдак работает когда как
		  akkFile.setBenutzer(benutzer);
		  // wer hat den Akk-Datei angelegt		  
		  vorgang.getAkkFile().setBenutzer(benutzer);		  
		}		
		akkEntryis = new ArrayList<AKKEntry>();
				
		String line = "";
		
		errLstAkk = new ArrayList<String>();
		
		errCnt = 0;
                // длинная процедура заполнения энтити подчиненного akkFile из csv
                // ошибка именно при сохранении
                vorgang = vorgangRepository.save(vorgang);
                // разные варианты пробовал но никак не помогает
		      vorgangRepository.save(vorgang);
		      vorgang = vorgangRepository.findOne(vorgang.getId());



Иерархия маппинга сверху вниз

Benutzer->akkFile->akkEntrry
Benutzer->Vorgang->akkFile->akkEntrry

Увы иерархия не прямая - ну не я ее придумал.

БД - оракл 12, ссервер приложение - томкат- гоняю его из под эклипс марс

Версия спринг
Код: java
1.
2.
3.
groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.0.M3</version>


Билдер - maven
Все пакеты необзодимые вроде валидатора и пр примочек к спрингу вклбчая и 5 хибернейт с сервака конторы из хранилища мавен. Все актуальное. Что не верно?
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39267114
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И при чем тут data.model.User? Или это недопереименованный Benutzer? Из приведенного кода непонятно
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39269353
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,

Да именно бенутцер. Сначала взялся переводить на более всм понятный нгл но потом плюнул и так все ясно.

Что делаю не так откуда глюк
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39269398
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александр,

А этот метод у вас завернут в транзакцию? Spring создает только одну hibernate сессию? Если, нет, то у вас выходит по одной сессии на каждый запрос к репозиториям и один и тот же User загружатся разными сессиями.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39270217
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

авторА этот метод у вас завернут в транзакцию?
напрямую с ними не работаю.

автор Spring создает только одну hibernate сессию? Если, нет, то у вас выходит по одной сессии на каждый запрос к репозиториям и один и тот же User загружатся разными сессиями.
Можно пример как это с репозиторием работает а не с фабрикой?
В конфе да только 1 сессия по логике все через нее.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39270308
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по примеру кода ничего не понятно ...
дайте болше кода : бины, репозитории итд ...

может ленивая иницализация прокси полей , когда сессия уже закрыта ?! а может еще что то...

Пишите jpql сразу вытаскивая все что нужно через ?
Код: java
1.
import org.springframework.data.repository.query.Param;
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39270358
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да тут напутано - со стаканом не разберешься.
С одной стороны
Код: java
1.
2.
3.
vorgang.setAkkFile(new AKKFile());
...
vorgang.getAkkFile().setBenutzer(benutzer);


То есть akkFile ФК для vorgang. С другой утверждается, что такая иерархия маппинга сверху вниз
Benutzer->akkFile->akkEntrry
Benutzer->Vorgang->akkFile->akkEntrry
То есть Vorgang ФК для akkFile.
где истина?
Ну, допустим Vorgang->akkFile это связь 1 к 1, тогда код vorgang.setAkkFile(new AKKFile()) возможен. Тогда всё равно вопрос, vorgang.setBenutzer?
Сплошные загадки. Разбираться со структурой данных и маппингом, а после - с данными в сессии:
Код: java
1.
2.
3.
4.
vorgang = getView().getVorgang();
//... blablabla
// как это реализовано?
vorgangRepository.save(vorgang);
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39270362
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraРазбираться со структурой данных и маппингом
+1
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39271037
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,

авторBenutzer->akkFile->akkEntrry
Benutzer->Vorgang->akkFile->akkEntrry
То есть Vorgang ФК для akkFile.

Benutzer->akkFile 1 ко многим

akkFile->akkEntrry 1 ко многим

Benutzer->Vorgang 1 ко многим

Vorgang->akkFile 1 к 1

авторрепозитории
Там смотреть не особо есть на что. Просто интерфейс. Без кода ну кроме пары селектов завернуты в findBy

Код: 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.
@Entity
public class BezugsQuartal
{
	@Id
	@SequenceGenerator(name = "SEQ_BEZUGQUART", sequenceName = "SEQ_BEZUGQUART")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BEZUGQUART")
	private Long id;
	
	@OneToMany(mappedBy = "bezugsQuartal", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private List<Vorgang> vorgangList = new ArrayList<Vorgang>();
	
	private String quartal;
	
	public Long getId()
	{
		return id;
	}

	public void setId(Long id)
	{
		this.id = id;
	}
	
	public void addVorgang(Vorgang vorgang)
	{
		if (vorgang != null)
		{
			vorgangList.add(vorgang);
			vorgang.setBezugsQuartal(this);			
		}
	}
	
	public List<Vorgang> getVorgangList()
	{
		return vorgangList;
	}

	public void setVorgangList(List<Vorgang> vorgangList)
	{
		this.vorgangList = vorgangList;
		this.vorgangList.forEach(								
									(vorgang) -> {
														if (vorgang != null)
														{
														  vorgang.setBezugsQuartal(this);
														}
													}
								   ); 
	}
	
	public String getQuartal()
	{
		return quartal;
	}

	public void setQuartal(String quartal)
	{
		this.quartal = quartal;
	}
}



Код: 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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
@Entity
public class Vorgang
{
	@Id
	@SequenceGenerator(name = "SEQ_VORGANG", sequenceName = "SEQ_VORGANG")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_VORGANG")
	private Long id;

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
	@JoinColumn(name = "BUCHUNGS_QUARTAL_ID")
	private BuchungsQuartal buchungsQuartal;
	
	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
	@JoinColumn(name = "BEZUGS_QUARTAL_ID")
	private BezugsQuartal bezugsQuartal;

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
	@JoinColumn(name = "BENUTZER_ID")
	private Benutzer benutzer;
	
	@OneToMany(mappedBy = "vorgang", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	private List<Subvorgang> subvorgangList = new ArrayList<Subvorgang>();
	
	@OneToOne(mappedBy = "vorgang", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private AKKFile akkFile;
	
	@OneToOne(mappedBy = "vorgang", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private UBSFile ubsFile;
	
	@OneToOne(mappedBy = "vorgang", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private KKKFile kkkFile;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(nullable = false)
	private Date created;
	
	private int status;
	
	private String textStatus;
	
	private String arenaTitel;
	
	private String arenaId;

	public Long getId()
	{
		return id;
	}

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

	public Benutzer getBenutzer()
	{
		return benutzer;
	}

	public void setBenutzer(Benutzer benutzer)
	{
		this.benutzer = benutzer;
	}

	public void addSubvorgang(Subvorgang subvorgang)
	{
		if (subvorgang != null)
		{
			subvorgangList.add(subvorgang);
			if (subvorgang != null)
			{
			  subvorgang.setVorgang(this);
			}
		}
	}
	
	public List<Subvorgang> getSubvorgangList()
	{
		return subvorgangList;
	}

	public void setSubvorgangList(List<Subvorgang> subvorgangList)
	{
		this.subvorgangList = subvorgangList;
		this.subvorgangList.forEach(								
									(subvorgang) -> {
														if (subvorgang != null)
														{
														  subvorgang.setVorgang(this);
														}
													}
								   ); 
	}
	
	public void setAkkFile(AKKFile akkFile)
	{
		this.akkFile = akkFile;
		if (akkFile != null)
		{
			akkFile.setVorgang(this);
		}
	}
	
	public AKKFile getAkkFile()
	{
		return akkFile;
	}

	public void setKkkFile(KKKFile kkkFile)
	{
		this.kkkFile = kkkFile;
		if (kkkFile != null)
		{
			kkkFile.setVorgang(this);
		}
	}
	
	public KKKFile getKkkFile()
	{
		return kkkFile;
	}
	
	public void setUbsFile(UBSFile ubsFile)
	{
		this.ubsFile = ubsFile;
		if (ubsFile != null)
		{
			ubsFile.setVorgang(this);
		}
	}
	
	public UBSFile getUbsFile()
	{
		return ubsFile;
	}

	public final Date getCreated()
	{
		return created;
	}

	public final void setCreated(Date created)
	{
		this.created = created;
	}

	public BuchungsQuartal getBuchungsQuartal()
	{
		return buchungsQuartal;
	}

	public void setBuchungsQuartal(BuchungsQuartal buchungsQuartal)
	{
		this.buchungsQuartal = buchungsQuartal;
	}
	
	public void setBezugsQuartal(BezugsQuartal bezugsQuartal)
	{
		this.bezugsQuartal = bezugsQuartal;
	}
	
	public BezugsQuartal getBezugsQuartal()
	{
		return bezugsQuartal;
	}
	
	public void setStatus(int status)
	{
		this.status = status;
	}
	
	public int getStatus()
	{
		return status;
	}
	
	public String getTextStatus()
	{
		return textStatus;
	}
	
	public void setTextStatus(String textStatus)
	{
		this.textStatus = textStatus;
	}
	
	public String getTextStauts()
	{
		return this.textStatus;
	}
	
	public void setArenaTitel(String arenaTitel)
	{
		this.arenaTitel = arenaTitel;
	}
	
	public String getArenaTitel()
	{
		return this.arenaTitel;
	}
	
	public void setArenaId(String srenaId)
	{
		this.arenaId = srenaId;
	}
	
	public String getArenaId()
	{
		return this.arenaId;
	}
}



Код: 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.
93.
94.
95.
96.
97.
98.
99.
100.
@Entity
public class BuchungsQuartal
{
	@Id
	@SequenceGenerator(name = "SEQ_BUCHUNGSQUART", sequenceName = "SEQ_BUCHUNGSQUART")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BUCHUNGSQUART")
	private Long id;

	private String quartal;
	
	@OneToMany(mappedBy = "buchungsQuartal", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private List<Vorgang> vorgangList = new ArrayList<Vorgang>();
	
	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
	@JoinColumn(name = "BENUTZER_ID")
	private Benutzer benutzer;
	
	private int status;
	
	private String textStatus;

	public Long getId()
	{
		return id;
	}

	public void setId(Long id)
	{
		this.id = id;
	}
	
	public void addVorgang(Vorgang vorgang)
	{
		if (vorgang != null)
		{
			vorgangList.add(vorgang);
			vorgang.setBuchungsQuartal(this);			
		}
	}
	
	public List<Vorgang> getVorgangList()
	{
		return vorgangList;
	}

	public void setVorgangList(List<Vorgang> vorgangList)
	{
		this.vorgangList = vorgangList;
		this.vorgangList.forEach(								
									(vorgang) -> {
														if (vorgang != null)
														{
														  vorgang.setBuchungsQuartal(this);
														}
													}
								   ); 
	}


	public Benutzer getBenutzer()
	{
		return benutzer;
	}

	public void setBenutzer(Benutzer benutzer)
	{
		this.benutzer = benutzer;
	}

	public String getQuartal()
	{
		return quartal;
	}

	public void setQuartal(String quartal)
	{
		this.quartal = quartal;
	}
	
	public void setStatus(int status)
	{
		this.status = status;
	}
	
	public int getStatus()
	{
		return status;
	}
	
	public String getTextStatus()
	{
		return textStatus;
	}
	
	public void setTextStatus(String textStatus)
	{
		this.textStatus = textStatus;
	}
}



Код: 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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
@Entity
// @Transactional
public class Benutzer
{
	@Id
	@SequenceGenerator(name = "SEQ_BENUTZER", sequenceName = "SEQ_BENUTZER")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_BENUTZER")
	private Long id;
	
	@OneToMany(mappedBy = "benutzer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private List<Vorgang> vorgangList = new ArrayList<Vorgang>();
	
	@OneToMany(mappedBy = "benutzer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private List<AKKFile> akkFileList = new ArrayList<AKKFile>();
	
	@OneToMany(mappedBy = "benutzer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private List<KKKFile> kkkFileList = new ArrayList<KKKFile>();
	
	public Long getId()
	{
		return id;
	}

	public void setId(Long id)
	{
		this.id = id;
	}
	
	public void addVorgang(Vorgang vorgang)
	{
		if (vorgang != null)
		{
			vorgangList.add(vorgang);
			vorgang.setBenutzer(this);			
		}
	}
	
	public List<Vorgang> getVorgangList()
	{
		return vorgangList;
	}

	public void setVorgangList(List<Vorgang> vorgangList)
	{
		this.vorgangList = vorgangList;
		this.vorgangList.forEach(								
									(vorgang) -> {
														if (vorgang != null)
														{
														  vorgang.setBenutzer(this);
														}
													}
								   ); 
	}

	
	public void addAkkFile(AKKFile akkFile)
	{
		if (akkFile != null)
		{
			akkFileList.add(akkFile);			
			akkFile.setBenutzer(this);			
		}
	}
	
	public List<AKKFile> getAkkFileList()
	{
		return akkFileList;
	}

	public void setAkkFileList(List<AKKFile> akkFileList)
	{
		this.akkFileList = akkFileList;
		this.akkFileList.forEach(								
									(akkFile) -> {
														if (akkFile != null)
														{
															akkFile.setBenutzer(this);
														}
													}
								   ); 
	}

	
	public List<KKKFile> getKkkFileList()
	{
		return kkkFileList;
	}

	public void setKkkFileList(List<KKKFile> kkkFileList)
	{
		this.kkkFileList = kkkFileList;
		this.kkkFileList.forEach(								
									(kkkFile) -> {
														if (kkkFile != null)
														{
															kkkFile.setBenutzer(this);
														}
													}
								   ); 
	}

	
	private String login;
	
	public String getLogin()
	{
		return login;
	}

	public void setLogin(String login)
	{
		this.login = login;
	}
}



Код: 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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
@Entity
@CsvDataType
public class AKKEntry
{

	@Id
	@SequenceGenerator(name = "SEQ_AKKENTRY", sequenceName = "SEQ_AKKENTRY")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AKKENTRY")
	private Long id;

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinColumn(name = "AKKFILE_ID")
	private AKKFile akkFile;
	
	@CsvField(pos = 1)
	@Size(min = 3, max = 3, message = "Die Zeilegr&#246;sse musste 3 sein!")
	@Pattern(regexp="^(AKK)", message="Der Satzart ist ung&#252;ltig, musst nur AKK-Wert sein!")
	private String satzart;

	@Size(min = 5, max = 5, message = "Die Zeilegr&#246;sse vom Quartal ist nur 5 Symbolen!")
	@Pattern(regexp="^[1-4]{1}(20)[0-9]{2}", message="Der Quartal ist ung&#252;ltig! - musste ab 1 bis 4 anf&#228;ngen und im Ende Jahren ab 20 fangen an")
	@CsvField(pos = 2)
	private String quartal;

	@CsvField(pos = 3)
	@Size(min = 10, max = 10, message = "Der HNR ist ung&#252;ltig - die Zeilegr&#246;sse musste 10 sein!")
	@Pattern(regexp="^[0-9]+${10}", message="Der HNR ist ung&#252;ltig, nur Ziffern m&#252;ssen sein!")			
	private String hnr;

	@CsvField(pos = 4)	
	@Column(name = "diff_Hon")
	private int diffHon;

	@CsvField(pos = 5)
	@Min(value = 100, message = "Belegart ist ung&#252;ltig - die Zeilegr&#246;sse musste 3 sein!")
	@Max(value = 999, message = "Belegart ist ung&#252;ltig - die Zeilegr&#246;sse musste 3 sein!")			
	private int belegart;

	@CsvField(pos = 6)
	@Size(max = 255, message = "Die Zeile ist zu lang!")	
	private String text;

	@CsvField(pos = 7)		
	@Column(name = "buch_NrKVAI")
	private int buchNrKVAI;

	public Long getId()
	{
		return id;
	}

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

	public AKKFile getAkkFile()
	{
		return akkFile;
	}

	public void setAkkFile(AKKFile akkFile)
	{
		this.akkFile = akkFile;
	}

	public String getSatzart()
	{
		return satzart;
	}

	public void setSatzart(String satzart)
	{
		this.satzart = satzart;
	}

	public String getQuartal()
	{
		return quartal;
	}

	public void setQuartal(String quartal)
	{
		this.quartal = quartal;
	}

	public String getHnr()
	{
		return hnr;
	}

	public void setHnr(String hnr)
	{
		this.hnr = hnr;
	}

	public int getDiffHon()
	{
		return diffHon;
	}

	public void setDiffHon(int diffHon)
	{
		this.diffHon = diffHon;
	}

	public int getBelegart()
	{
		return belegart;
	}

	public void setBelegart(int belegart)
	{
		this.belegart = belegart;
	}

	public String getText()
	{
		return text;
	}

	public void setText(String text)
	{
		this.text = text;
	}

	public int getBuchNrKVAI()
	{
		return buchNrKVAI;
	}

	public void setBuchNrKVAI(int buchNrKVAI)
	{
		this.buchNrKVAI = buchNrKVAI;
	}
}



Код: plaintext
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.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
@Entity
public class AKKFile
{
	@Id
	@SequenceGenerator(name = "SEQ_AKKFILE", sequenceName = "SEQ_AKKFILE")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_AKKFILE")
	private Long id;

	@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)	
	@JoinColumn(name = "VORGANG_ID")
	private Vorgang vorgang;
	
	@OneToMany(mappedBy = "akkFile", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<AKKEntry> akkEntryList = new ArrayList<AKKEntry>();
	
	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
	@JoinColumn(name = "BENUTZER_ID")
	private Benutzer benutzer;
	
	@OneToOne(mappedBy = "akkFile", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@PrimaryKeyJoinColumn
	private CsvAkkFile csvAkkFile;

	private String filename;

	private String uploader;

	public Long getId()
	{
		return id;
	}

	public void setId(Long id)
	{
		this.id = id;
	}	
	
	public Vorgang getVorgang()
	{
		return vorgang;
	}

	public void setVorgang(Vorgang vorgang)
	{
		this.vorgang = vorgang;
	}
	
	public void addEntry(AKKEntry akkEntry)
	{
		if (akkEntry != null)
		{
			akkEntryList.add(akkEntry);
			akkEntry.setAkkFile(this);
		}
	}
	
	public List<AKKEntry> getAkkEntryList()
	{
		return akkEntryList;
	}

	public void setAkkEntryList(List<AKKEntry> akkEntryList)
	{
		this.akkEntryList = akkEntryList;
		this.akkEntryList.forEach(								
									(akkEntry) -> {
														if (akkEntry != null)
														{															
															akkEntry.setAkkFile(this);
														}
													}
								   ); 
	}
	
	public Benutzer getBenutzer()
	{
		return benutzer;
	}

	public void setBenutzer(Benutzer benutzer)
	{
		this.benutzer = benutzer;
	}
	
	public void setCsvAkkFile(CsvAkkFile csvAkkFile)
	{
		this.csvAkkFile = csvAkkFile;
		if (csvAkkFile != null)
		{
			csvAkkFile.setAkkFile(this);
		}
	}
	
	public CsvAkkFile getCsvAkkFile()
	{
		return csvAkkFile;
	}
	
	@Override
	public String toString()
	{
		return ReflectionToStringBuilder.toString(this);
	}

	public String getFilename()
	{
		return filename;
	}

	public void setFilename(String filename)
	{
		this.filename = filename;
	}

	public String getUploader()
	{
		return uploader;
	}

	public void setUploader(String uploader)
	{
		this.uploader = uploader;
	}
}
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39271578
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Вас или ничего или все :)


можно было бы геттеры сетеры и не вставлять - только важные описания ...

а где код как вы со всем этим работаете ? еще раз ?
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39271635
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зубок александр,
необходимо исключить встречные каскады.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39272097
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1,

Так выше в первом посту. Куда уж подробнее. Просто с рабоыт на горячую писать не могу рунет заюанен в принципе даже на чтение - политика гос. конторые немейкой туды ее сюды. А дома уже не очень хорошо с мотивацией. Проектная работа и сильно ненормированные раб. день - ну не я этот дедлайн устроил но разгребать в том числе мне.

авторнеобходимо исключить встречные каскады.
Я конечно почитаю но буду благодарен если носом ткнете. Просто там объем не мелкий и без этого а тут еще и этот баг вылез как и пара других.

Например после обновления спринга до последней версии от чего то юнит тест перестал работать - там опять же хибернейте и ваадин
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39272333
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, это скорее общая практика, так как CascadeType действует транзитивно, и может привести к большому количеству операций select/update. И кроме того, CascadeType.ALL включает в себя CascadeType.MERGE, и петли в приведенном примере гарантированы.
А в конкретном примере вот что происходит: абсолютно все связи помечены с родительской стороны
Код: java
1.
cascade = CascadeType.ALL

, с подчиненной стороны
Код: java
1.
fetch = FetchType.EAGER, cascade = CascadeType.MERGE


Атрибут cascade сделан для ленивых программистов и означает, что соответствующее действие будет транзитивно выполняться в связанной сущности. Не приведен код метода vorgangRepository.save(vorgang), но, скорее всего там что-то типа
Код: java
1.
return session.merge(vorgang)


И вот у этого vorgang с одной стороны имеется присоединенный к сессии vorgang.akkfile.benutzer, с другой - отсоединенный vorgang.benutzer (тоже не видим кода, но скорее всего это так, поскольку связь жадная). Вот этот vorgang.benutzer и есть Detached instance из приведенного текста ошибки. Если vorgang.benutzer и vorgang.akkfile.benutzer с разными id, ошибки не будет.
Я бы везде на подчиненной стороне убрал CascadeType.MERGE. Какой смысл при изменении vorgang автоматически мержить vorgang.benutzer, в нем что-то тоже меняется?
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39272356
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александрBenutzer->akkFile 1 ко многим

akkFile->akkEntrry 1 ко многим

Benutzer->Vorgang 1 ко многим

Vorgang->akkFile 1 к 1
заполните таблички хотя бы двумя записями для примера.
Это галиматья какая то а не модель данных.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39272358
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraАтрибут cascade сделан для ленивых программистов и означает, что соответствующее действие будет транзитивно выполняться в связанной сущности.
судя по его словам выше, у него главная самая верхняя сущность - Benutzer .
Т.е. единственный каскад можно делать - удалить всю базу при удалении главной сущности.
Вряд ли именно это ему и надо.
Модель данных хромает.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276697
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

авторсудя по его словам выше, у него главная самая верхняя сущность - Benutzer.
Т.е. единственный каскад можно делать - удалить всю базу при удалении главной сущности.
Вряд ли именно это ему и надо.
Таблица бенутцер не редактируема . она заполняется автоматом приложением. М б в будущем админка и будет но вероятность процента 3. Особенность предприятия именно такова. Не я модель БД проектировал и не мне ее изменять.
Политика предприятия.
Видел модели и похуже.

Проблема детачед ушла за счет изменения маппинга но перешла в другую плоскость.

При добавлении akkfile в vorgang и следующем добавлении kkkfile akkfile при сохранении через репозиторий vorgang

Код: java
1.
vorgangRepository.save(vorgang)


задваивается. И все дочернии записи от akkfile тоже

Вот маппинг связи vorgang -> akkfile - для kkkfile он такой же

Код: java
1.
2.
3.
4.
5.
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH}, mappedBy = "vorgang", fetch = FetchType.EAGER, orphanRemoval=true)

       @PrimaryKeyJoinColumn

       private AKKFile akkFile;



А вот с другой стороны. со стороны akkfile

Код: java
1.
2.
3.
4.
@OneToOne(cascade = {CascadeType.MERGE}, fetch = FetchType.LAZY)
@JoinColumn(name = "VORGANG_ID")

       private Vorgang vorgang;



Пробовал играть с касчкадами и типом транзакций . не помогает. Либо задваивает либо null index column for collection cascade all ошибка
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александр,
Какая разница, редактируется табла или нет.
Тебя просят факты а не бла бла что проект старый.
Кому охота разбираться в старье, если тебе лень:
- 3 строки с данными
- маппинг полный но без пустых геттеров
- код до ошибки, чтобы мы засунули его в тест и он работал.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276744
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

автор3 строки с данными
- маппинг полный но без пустых геттеров
Код ошибки есть актуальный маппинг я выложил.

Я уже написал что проблема перешла в другую плоскость.
См пост выше
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276749
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александр,
См.пост выше. Без записей и структуры таблиц нельзя сделать верный маппинг.
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276752
зубок александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

записи из файлов добавлял.

Кроме ошибки задвоения все работает.

Вот ее природа мне не ясна.

Читал что также есть такой глюк хибернейта как и не рекомендуется использовать list вместо set.

Но это 1 ко многим а у меня 1 к 1.

Сейчас нет исходников что есть выложил. Только завтра вечером.

Если кто скажет где искать глюк задвоение заране спасибо. Как я понимаю это каскады неверные. Но мало с хиьбернейт работал
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276887
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александрзаписи из файлов добавлял.
я имел ввиду если у тебя не пара таблиц, а все 6 работают, то нужен пример типа такого:
id name123 Вася
+ create table чтобы создать у себя пример.
А то фиг разберёшься с твое мешаниной Модели.
зубок александрКроме ошибки задвоения все работает.
Вот ее природа мне не ясна.
Я спринг не знаю. По хиберу там всё элементарно
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
EmployeeEntity employee = new EmployeeEntity();
employee.setFirstName("FirstName");
employee.setLastName("LasettName");

AddressEntity address = new AddressEntity();
address.setCity("Moscow");
address.setStreet("Lenina");

address.setEmployee(employee);
session.save(address);


поэтому найти заведомо рабочий пример 1 к 1 на спринге в сети и приводи свой пример к тому что работает.
Что тут сложного то?
У тебя не работает пара таблиц с единственной связью? Hello world?
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39276890
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александрПри добавлении akkfile в vorgang и следующем добавлении kkkfile akkfile при сохранении через репозиторий vorgang
вот еслу у тебя не 2 таблы а более, то по полной выкладывай всю инфу что писал.
Модель имеет значение (с)
...
Рейтинг: 0 / 0
Ошибка В Хибернейте вставленные записи отсоединены
    #39277001
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зубок александр, теме уже две недели :

за это время можно на гите набросать простой пример с простой объектной моделью - в виде теста и выложить сюда ...

Назвать все для примера нормально чтобы мы поняли и смогли помочь ...

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


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