powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
15 сообщений из 15, страница 1 из 1
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706020
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!

Класс составного ключа для родительской сущности:

Код: 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.
package com.intellex.marksist.hbn.model;

import java.io.Serializable;
import javax.persistence.Embeddable;

@Embeddable
public class FKGbCapacity implements Serializable {
    private Integer capOrgId;
    private Integer groupCargo;
    /**
     * 
     */
    public FKGbCapacity() {}
    /**
     * 
     * @param capOrgId
     * @param groupCargo
     */
    public FKGbCapacity(Integer capOrgId, Integer groupCargo) {
        this.capOrgId = capOrgId;
        this.groupCargo = groupCargo;
    }
    /**
     * 
     * @return
     */
    public Integer getCapOrgId() {
        return capOrgId;
    }
    /**
     * 
     * @param capOrgId
     */
    private void setCapOrgId(Integer capOrgId) {
        this.capOrgId = capOrgId;
    }
    /**
     * 
     * @return
     */
    public Integer getGroupCargo() {
        return groupCargo;
    }
    /**
     * 
     * @param groupCargo
     */
    private void setGroupCargo(Integer groupCargo) {
        this.groupCargo = groupCargo;
    }
}



Соответственно, родительская сущность -
Код: 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.
215.
216.
217.
218.
package com.intellex.marksist.hbn.model;

import java.util.List;

import javax.persistence.AttributeOverrides;
import javax.persistence.AttributeOverride;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_CAPACITY")
@IdClass(FKGbCapacity.class)
public class GbCapacity {
	
	public GbCapacity() {}
	
	public GbCapacity(FKGbCapacity fKGbCapacity) {
		capOrgId = fKGbCapacity.getCapOrgId(); 
		groupCargo = fKGbCapacity.getGroupCargo(); 
	}
	
	@Id
	@AttributeOverrides({
		@AttributeOverride(name = "capOrgId", column = @Column(name="CAP_ORG_ID")),
		@AttributeOverride(name = "groupCargo",column = @Column(name="GRUP_GRUZ"))
	})

	private Integer capOrgId;
    private Integer groupCargo;
	
	@Column(name = "CAP_2012")
	private Integer cap2012;
	
	@Column(name = "CAP_2013")
	private Integer cap2013;
	
	@Column(name = "CAP_2015")
	private Integer cap2015;
	
	@Column(name = "CAP_2020")
	private Integer cap2020;
	
	@Column(name = "CAP_2030")
	private Integer cap2030;
	
	@Column(name = "CHANGER_ID")
	private Integer changerId;
	
	@Column(name = "RW_ID")
	private Integer rwId;
	
	@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="gbCapacity")
	@OnDelete(action=OnDeleteAction.CASCADE)
	private List<GbLoadForecast> gbLoadForecast;
	/**
	 */
//	public GbCapacity() {}
	/**
	 * @param fKGbCapacity
	 */
//	public GbCapacity(FKGbCapacity fKGbCapacity) {
//		capOrgId = fKGbCapacity.getCapOrgId(); 
//		groupCargo = fKGbCapacity.getGroupCargo(); 
//	}
	
	/**
	 * 
	 * @return
	 */
    public List<GbLoadForecast> getGbLoadForecast() {
        return gbLoadForecast;
    }
    /**
     * 
     * @param gbLoadForecast
     */
    public void setGbLoadForecast(List<GbLoadForecast> gbLoadForecast) {
        this.gbLoadForecast = gbLoadForecast;
    }
	/**
	 * 
	 * @return
	 */
//	public Integer getCapOrgId() {
//		return capOrgId;
//	}
	/**
	 * @param orgId 
	 */
//	public void setCapOrgId(Integer capOrgId) {
//		this.capOrgId = capOrgId;
//	}
	/**
	 * @param cap2012
	 */
	public void setCap2012(Integer cap2012) {
		this.cap2012 = cap2012;
	}
	/**
	 * @return 
	 */
	public Integer getCap2012() {
		return cap2012;
	}
	/**
	 * @param cap2013
	 */
	public void setCap2013(Integer cap2013) {
		this.cap2013 = cap2013;
	}
	/**
	 * 
	 * @return
	 */
	public Integer getCap2013() {
		return cap2013;
	}
	/**
	 * 
	 * @param cap2015
	 */
	public void setCap2015(Integer cap2015) {
		this.cap2015 = cap2015;
	}
	/**
	 * 
	 * @return
	 */
	public Integer getCap2015() {
		return cap2015;
	}
	/**
	 * 
	 * @param cap2020
	 */
	public void setCap2020(Integer cap2020) {
		this.cap2020 = cap2020;
	}
	/**
	 * 
	 * @return
	 */
	public Integer getCap2020() {
		return cap2020;
	}
	/**
	 * 
	 * @param cap2030
	 */
	public void setCap2030(Integer cap2030) {
		this.cap2030 = cap2030;
	}
	/**
	 * 
	 * @return
	 */
	public Integer getCap2030() {
		return cap2030;
	}
	/**
	 * 
	 * @param changerId
	 */
	public void setChangerId(Integer changerId) {
		this.changerId = changerId;
	}
	/**
	 * 
	 * @return
	 */
	public Integer getChangerId() {
		return changerId; 
	}
	/**
	 * 
	 * @param rwId
	 */
	public void setRwId(Integer rwId) {
		this.rwId = rwId;
	}
	/**
	 * 
	 * @return
	 */
	public Integer getRwId() {
		return rwId; 
	}
	/**
	 * 
	 * @param groupCargo
	 */
//	public void setGroupCargo(Integer groupCargo) {
//		this.groupCargo = groupCargo;
//	}
	/**
	 * 
	 * @return
	 */
//	public Integer getGroupCargo() {
//		return groupCargo; 
//	}
}



Класс составного ключа для дочерней сущности -
Код: 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.
package com.intellex.marksist.hbn.model;

import java.io.Serializable;
import javax.persistence.Embeddable;

@Embeddable
public class FKGbLoadForecast implements Serializable {
    private Integer fstOrgId;
    private Integer groupCargo;
    private Integer stId;
    /**
     */
    FKGbLoadForecast() {}
    /**
     * 
     * @param fstOrgId
     * @param groupCargo
     * @param stId
     */
    public FKGbLoadForecast(Integer fstOrgId, Integer groupCargo, Integer stId) {
        this.fstOrgId = fstOrgId;
        this.groupCargo = groupCargo;
        this.stId = stId;
    }
    /**
     * 
     * @return
     */
    public Integer getFstOrgId() {
        return fstOrgId;
    }
    /**
     * 
     * @param fstOrgId
     */
    private void setFstOrgId(Integer fstOrgId) {
        this.fstOrgId = fstOrgId;
    }
    /**
     * 
     * @return
     */
    public Integer getGroupCargo() {
        return groupCargo;
    }
    /**
     * 
     * @param groupCargo
     */
    private void setGroupCargo(Integer groupCargo) {
        this.groupCargo = groupCargo;
    }
    /**
     * 
     * @return
     */
    public Integer getStId() {
        return stId;
    }
    /**
     * 
     * @param stId
     */
    private void setStId(Integer stId) {
        this.stId = stId;
    }
}



Дочерняя сущность -
Код: 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.
package com.intellex.marksist.hbn.model;

import java.util.List;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;

import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.Cache;

@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_LOAD_FORECAST")
@IdClass(FKGbLoadForecast.class)
public class GbLoadForecast {
	public GbLoadForecast() {}
	
	public GbLoadForecast(Integer fstOrgId, Integer groupCargo) {
		this.fstOrgId = fstOrgId;
		this.groupCargo = groupCargo;
	}

	@Id
	@AttributeOverrides({
		@AttributeOverride(name = "fstOrgId", column = @Column(name="FST_ORG_ID")),
		@AttributeOverride(name = "groupCargo",column = @Column(name="GRUP_GRUZ")),
		@AttributeOverride(name = "stId",column = @Column(name="ST_ID"))
	})
	private Integer fstOrgId;
    private Integer groupCargo;
	
	@Column(name = "STID")
    private Integer stId;
	
	@Column(name = "SENDER_ID")
	private Integer senderId;

	@Column(name = "FST_2012")
	private Integer fst2012;
	
	@Column(name = "FST_2013")
	private Integer fst2013;
	
	@Column(name = "FST_2014")
	private Integer fst2014;
	
	@Column(name = "FST_2015")
	private Integer fst2015;
	
	@Column(name = "CHANGER_ID")
	private Integer changerId;
	
	@Column(name = "RW_ID")
	private Integer rwId;
	
	@ManyToOne(cascade=CascadeType.ALL)
	private GbCapacity gbCapacity;
	
	/**
	 * @return
	 */
    public GbCapacity getGbCapacity() {
        return gbCapacity;
    }
    /**
     * @param gbLoadForecast
     */
    public void setGbCapacity(GbCapacity gbCapacity) {
        this.gbCapacity = gbCapacity;
    }
//	/**
//	 * @return
//	 */
//	public Integer getFstOrgId() {
//		return fstOrgId;
//	}
//	/**
//	 * @param orgId
//	 */
//	public void setFstOrgId(Integer fstOrgId) {
//		this.fstOrgId = fstOrgId;
//	}
	/**
	 * @param senderId
	 */
	public void setSenderId(Integer senderId) {
		this.senderId = senderId;
	}
	/**
	 * @return
	 */
	public Integer getSenderId() {
		return senderId;
	}
//	/**
//	 * @param stId
//	 */
//	public void setStId(Integer stId) {
//		this.stId = stId;
//	}
//	/**
//	 * @return
//	 */
//	public Integer getStId() {
//		return stId;
//	}
//	/**
//	 * @return
//	 */
//	public Integer getCargoGroup() {
//		return groupCargo;
//	}
//	/**
//	 * @param cargoGroup
//	 */
//	public void setGroupCargo(Integer groupCargo) {
//		this.groupCargo = groupCargo;
//	}
	/**
	 * @return
	 */
	public Integer getFst2012() {
		return fst2012;
	}
	/**
	 * @param fst2012
	 */
	public void setFst2012(Integer fst2012) {
		this.fst2012 = fst2012;
	}
	/**
	 * @return
	 */
	public Integer getFst2013() {
		return fst2013;
	}
	/**
	 * @param fst2013
	 */
	public void setFst2013(Integer fst2013) {
		this.fst2013 = fst2013;
	}
	/**
	 * @return
	 */
	public Integer getFst2014() {
		return fst2014;
	}
	/**
	 * @param fst2014
	 */
	public void setFst2014(Integer fst2014) {
		this.fst2014 = fst2014;
	}
	/**
	 * @return
	 */
	public Integer getFst2015() {
		return fst2015;
	}
	/**
	 * @param fst2015
	 */
	public void setFst2015(Integer fst2015) {
		this.fst2015 = fst2015;
	}
	/**
	 * @param changerId
	 */
	public void setChangerId(Integer changerId) {
		this.changerId = changerId;
	}
	/**
	 * @return
	 */
	public Integer getChangerId() {
		return changerId; 
	}
	/**
	 * @param rwId
	 */
	public void setRwId(Integer rwId) {
		this.rwId = rwId;
	}
	/**
	 * @return
	 */
	public Integer getRwId() {
		return rwId; 
	}
}



Структура таблиц -

Код: plsql
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.
select dbms_metadata.get_ddl('TABLE', 'GB_CAPACITY', 'MARKSIST') from dual;


  CREATE TABLE "MARKSIST"."GB_CAPACITY" 
   (	"CAPORGID" NUMBER(10,0) NOT NULL ENABLE, 
	"GROUPCARGO" NUMBER(10,0) NOT NULL ENABLE, 
	"CAP_2012" NUMBER(10,0), 
	"CAP_2013" NUMBER(10,0), 
	"CAP_2015" NUMBER(10,0), 
	"CAP_2020" NUMBER(10,0), 
	"CAP_2030" NUMBER(10,0), 
	"CHANGER_ID" NUMBER(10,0), 
	"RW_ID" NUMBER(10,0), 
	 PRIMARY KEY ("CAPORGID", "GROUPCARGO")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TBS_SDE"  ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TBS_SDE" 
 
select dbms_metadata.get_ddl('TABLE', 'GB_LOAD_FORECAST', 'MARKSIST') from dual;


  CREATE TABLE "MARKSIST"."GB_LOAD_FORECAST" 
   (	"FSTORGID" NUMBER(10,0) NOT NULL ENABLE, 
	"GROUPCARGO" NUMBER(10,0) NOT NULL ENABLE, 
	"STID" NUMBER(10,0) NOT NULL ENABLE, 
	"CHANGER_ID" NUMBER(10,0), 
	"FST_2012" NUMBER(10,0), 
	"FST_2013" NUMBER(10,0), 
	"FST_2014" NUMBER(10,0), 
	"FST_2015" NUMBER(10,0), 
	"RW_ID" NUMBER(10,0), 
	"SENDER_ID" NUMBER(10,0), 
	"GBCAPACITY_CAPORGID" NUMBER(10,0), 
	"GBCAPACITY_GROUPCARGO" NUMBER(10,0), 
	 PRIMARY KEY ("FSTORGID", "GROUPCARGO", "STID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TBS_SDE"  ENABLE, 
	 CONSTRAINT "FK76D8C5FA4E97DBA4" FOREIGN KEY ("GBCAPACITY_CAPORGID", "GBCAPACITY_GROUPCARGO")
	  REFERENCES "MARKSIST"."GB_CAPACITY" ("CAPORGID", "GROUPCARGO") ON DELETE CASCADE ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "TBS_SDE" 
 



Собственно, вопрос заключается в отыскании корректного способа добавления данных; так, чтобы потом можно было удалять каскадом.

Был бы весьма признателен за информацию.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706061
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
кому нужны твои простыни кода
- лишние поля, геттеры, лишний SQL-DML
- даже запросы, как ты их получал dual.

Воспитываем отвращение к ОРМ вопросом - как вставить данные?
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706115
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Petro123!

Возможно, вы правы относительно избыточности некоторых данных..
Нет, такой цели я не преследую, а всего- лишь хочу овладеть best practice в работе с ORM.
Пожалуй, даже и не хватает сведений- например, примеров не правильного добавления и удаления и пр.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706129
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
тогда ВСЁ убери и сделай демку с 2-мя полями (id,name)
- маппинг\dml\main
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706154
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, я лучше приведу пример, как добавляются данные в моем случае; наверное, он как раз будет антипримером, поскольку каскадное удаление при таком подходе не срабатывает.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706331
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, собственно, с первой таблицей работа строится следующим образом -

Добавление записи:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
...
    	FKGbCapacity fKGbCapacity = new FKGbCapacity(id1, id2);
    	GbCapacity gbCapacityEntity = new GbCapacity(fKGbCapacity);
    	gbCapacityEntity.setRwId(rwId);
    	gbCapacityEntity.setChangerId(chId);
    	gbCapacityEntity.setCap2012(cYp);
    	gbCapacityEntity.setCap2013(nYp);
    	gbCapacityEntity.setCap2015(y2015p);
    	gbCapacityEntity.setCap2020(y2020p);
    	gbCapacityEntity.setCap2030(y2030p);
    	
    	if(dao.insert(gbCapacityEntity)) 
    		table.addItem(new Object[] {compositeCompanyName, compositeCargoGName, cYp, nYp, 
    			y2015p, y2020p, y2030p}, new Integer(table.size()+1));

...



Удаление:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
    	Integer id1 = Integer.parseInt(stringParser.getIdValue(item.getItemProperty(ptId).
    			getValue().toString().trim()).trim());
		Integer id2 = Integer.parseInt(stringParser.getIdValue(item.getItemProperty(ptCg).
			getValue().toString().trim()).trim());
    	if(daoGbCapacity.delete(daoGbCapacity.getEntity(id1, id2)))
    		if(0 < pT.size()) pT.removeItem(itemId);
    			if(0 == pT.size()) {
    				rB.setEnabled(false);
    				chB.setEnabled(false); 
    			}

...



Загрузка данных при инициализации:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
...
		List<GbCapacity> l = dao.findAll();
		for(Object o:l) {
			GbCapacity gb = (GbCapacity) o;
			Integer orgId = gb.getCapOrgId();
			Integer rwId = gb.getRwId();
			Integer gcId = gb.getGroupCargo(); 
			Integer chId = gb.getChangerId();
			Integer cYp = gb.getCap2012();
			Integer nYp = gb.getCap2013();
			Integer y2015p = gb.getCap2015();
			Integer y2020p = gb.getCap2020();
			Integer y2030p = gb.getCap2030();

			String compositeCompanyName = orgId + " : " + getCompanyName(orgId);
			String compositeCargoGName = gcId + " : " + getCargoGroupName(gcId);
			
			pT.addItem(new Object[] {compositeCompanyName, compositeCargoGName, cYp, nYp, y2015p, 
					y2020p, y2030p}, new Integer(pT.size()+1));
			pT.sort();
		}					
...
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706338
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь все в порядке. Далее следует при выборе какой- либо строки в первой таблице добавлять произвольное число строк во вторую - дочернюю, так, чтобы при удалении строки из родительской все введенные ранее строки второй таблицы также удалялись. Чуть позже покажу, как это не получается.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706365
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
OFF
нда.
Упрощать пример-демку-проблему ты не умеешь.
В прошлый раз у тебя именно из за этого была проблема - первый этап-маппинг с кучей лишних полей.

ivanov-voidДалее следует при выборе какой- либо строки в первой таблице добавлять произвольное число строк во вторую - дочернюю, так, чтобы при удалении строки из родительской все введенные ранее строки второй таблицы также удалялись
такая странная БЛ вполне может быть из-за неправильной Модели.
Я не удивлюсь, если БД этой задаче сопротивляется.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706813
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, возможно.

Так, теперь я добавляю запись в дочернюю таблицу и обновляю соответствующую запись в родительской-
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...
	gbLoadForecastDAO.insert(gbLoadForecast);
        GbCapacity gbCapacity = gbCapacityDAO.getEntity(orgId, gcId);
        List<GbLoadForecast> temp = gbCapacity.getGbLoadForecast();

        if(null == temp) temp = new ArrayList();

        temp.add(gbLoadForecast);
        gbCapacity.setGbLoadForecast(temp);
        gbCapacityDAO.update(gbCapacity);

        table.addItem(new Object[] {orgName, gcName, stName, predictionLoadingOnCurrentYear, 
    			predictionLoadingOnNextYear, predictionLoadingOn2014, predictionLoadingOn2015}, new Integer(table.size()+1));
...



Подгружаю дочерние записи по клику на строке в родительской -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    	ArrayList<GbLoadForecast> l = gbLoadForecastDAO.findSome(orgId, gcId);
		fT.removeAllItems();
		for(Object o:l) {
...			
			fT.addItem(new Object[] {compositeCompanyName, compositeCargoGName, compositeStationName, 
					fst2012, fst2013, fst2014, fst2015}, new Integer(fT.size()+1));
			fT.sort();
		}					



Пока все ок.

Удаляю строку в родительской -
Код: java
1.
2.
3.
...
    	if(daoGbCapacity.delete(daoGbCapacity.getEntity(id1, id2)))
...



Строка в дочерней остается. Не ясно пока, как с этим бороться.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706822
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidКласс составного ключа для родительской сущности:
это лишнее в Модели
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706845
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему же?
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37706901
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidПочему же?
мне лень читать простыни. Приведи простой пример составного...., и обоснование его необходимости.
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37707447
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, ну хочется мне вот с составным ключом чтобы было. : -) Так удобнее идентифицировать записи - в первой таблице по первым двум полям, во второй- по трем. Соответственно, класс составного ключа, например, для первой таблицы будет выглядеть так-

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
...
@Embeddable
public class FKGbCapacity implements Serializable {
    private Integer capOrgId;
    private Integer groupCargo;

    public FKGbCapacity() {}

    public FKGbCapacity(Integer capOrgId, Integer groupCargo) {
        this.capOrgId = capOrgId;
        this.groupCargo = groupCargo;
    }
    // приватные сеттеры и паблик- геттеры
}
...



И его место в отображении первой таблицы -
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_CAPACITY")
@IdClass(FKGbCapacity.class)
public class GbCapacity {
	public GbCapacity() {}
	
	public GbCapacity(FKGbCapacity fKGbCapacity) {
		capOrgId = fKGbCapacity.getCapOrgId(); 
		groupCargo = fKGbCapacity.getGroupCargo(); 
	}
	
	@Id
	@AttributeOverrides({
		@AttributeOverride(name = "capOrgId", column = @Column(name="CAP_ORG_ID")),
		@AttributeOverride(name = "groupCargo",column = @Column(name="GRUP_GRUZ"))
	})

	private Integer capOrgId;
        private Integer groupCargo;
...
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37707497
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-voidТак удобнее идентифицировать записи
а вдруг ты ошибся?
И ОРМ \ ораклу и т.д лучше идентифицировать по добавочному полю - суррогатный
http://ru.wikipedia.org/wiki/%D0%A1%D1%83%D1%80%D1%80%D0%BE%D0%B3%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BB%D1%8E%D1%87
Я уже не говорю, что _желательно_ класс - это таблица в БД. Хотя есть фичи и варианты...
Может посмотрю позже, счас пока не готов абстрактно рассуждать.
Удачи!
ЗЫ
через суррогатный делают каскад из 3-х дочек
...
Рейтинг: 0 / 0
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
    #37707505
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, благодарю за информацию.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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