Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом? / 15 сообщений из 15, страница 1 из 1
15.03.2012, 09:52:38
    #37706020
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
Приветствую!

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

Код: 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
15.03.2012, 10:20:14
    #37706061
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
ivanov-void,
кому нужны твои простыни кода
- лишние поля, геттеры, лишний SQL-DML
- даже запросы, как ты их получал dual.

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

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

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

Код: 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
15.03.2012, 12:23:35
    #37706338
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
Здесь все в порядке. Далее следует при выборе какой- либо строки в первой таблице добавлять произвольное число строк во вторую - дочернюю, так, чтобы при удалении строки из родительской все введенные ранее строки второй таблицы также удалялись. Чуть позже покажу, как это не получается.
...
Рейтинг: 0 / 0
15.03.2012, 12:39:04
    #37706365
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
ivanov-void,
OFF
нда.
Упрощать пример-демку-проблему ты не умеешь.
В прошлый раз у тебя именно из за этого была проблема - первый этап-маппинг с кучей лишних полей.

ivanov-voidДалее следует при выборе какой- либо строки в первой таблице добавлять произвольное число строк во вторую - дочернюю, так, чтобы при удалении строки из родительской все введенные ранее строки второй таблицы также удалялись
такая странная БЛ вполне может быть из-за неправильной Модели.
Я не удивлюсь, если БД этой задаче сопротивляется.
...
Рейтинг: 0 / 0
15.03.2012, 15:20:12
    #37706813
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
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
15.03.2012, 15:24:06
    #37706822
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
ivanov-voidКласс составного ключа для родительской сущности:
это лишнее в Модели
...
Рейтинг: 0 / 0
15.03.2012, 15:32:41
    #37706845
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
Почему же?
...
Рейтинг: 0 / 0
15.03.2012, 15:54:02
    #37706901
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
ivanov-voidПочему же?
мне лень читать простыни. Приведи простой пример составного...., и обоснование его необходимости.
...
Рейтинг: 0 / 0
15.03.2012, 20:06:25
    #37707447
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
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
15.03.2012, 20:58:54
    #37707497
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
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
15.03.2012, 21:07:12
    #37707505
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом?
Хорошо, благодарю за информацию.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и natural keys - как правильно добавить данные, чтобы потом удалить каскадом? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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