Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate : объединение delete clause / 25 сообщений из 67, страница 1 из 3
12.03.2012, 21:25:28
    #37701614
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Приветствую!

Возможно- ли как- то объединить delete clause, чтобы, например, избежать такой последовательности вызовов -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
    	String hql = "DELETE FROM com.intellex.marksist.hbn.model.GbCapacityEntity "  + 
	     			 "WHERE orgId = :some_id";
    	dao.delete(hql, id);
    	
    	hql = "DELETE FROM com.intellex.marksist.hbn.model.GbLoadForecast "  + 
		 	  "WHERE orgId = :some_id";    	
    	dao.delete(hql, id);

...



Был бы весьма признателен за информацию.
...
Рейтинг: 0 / 0
12.03.2012, 21:47:20
    #37701640
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Объеденить для чего? А почему каскадом не сделать?
...
Рейтинг: 0 / 0
12.03.2012, 21:55:18
    #37701645
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Приветствую, Blazkowicz!

Да, наверное, лучше каскадом. Спасибо.
...
Рейтинг: 0 / 0
13.03.2012, 11:04:42
    #37702139
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Каскадом не совсем не удается -

Код: 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.
...

@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_LOAD_FORECAST")
public class GbLoadForecast {
	@Id	
	@Column(name = "ORG_ID")
	private Integer orgId;
	...	
	@ManyToOne(cascade={CascadeType.ALL},fetch = FetchType.LAZY)
	private List<GbCapacityEntity> gbCapacityEntity;	
    public List<GbCapacityEntity> getGbLoadForecast() {
        return gbCapacityEntity;
    }
    /**
     * @param gbLoadForecast
     */
    public void setGbLoadForecast(List<GbCapacityEntity> gbCapacityEntity) {
        this.gbCapacityEntity = gbCapacityEntity;
    }


...

@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_CAPACITY")
public class GbCapacityEntity {
	@Id
	@Column(name = "ORG_ID")
	private Integer orgId;
	
...	
	@OneToMany(targetEntity=com.intellex.marksist.hbn.model.GbLoadForecast.class, cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
	@JoinTable(name="MARKSIST.GB_LOAD_FORECAST",joinColumns={@JoinColumn(name="ORG_ID")},inverseJoinColumns={@JoinColumn(name="ORG_ID")})
	@OnDelete(action=OnDeleteAction.CASCADE)
	private List<GbLoadForecast> gbLoadForecast;
	
    @JoinColumn(name="ORG_ID", nullable = false)
    @OnDelete(action=OnDeleteAction.CASCADE)
    public List<GbLoadForecast> getGbLoadForecast() {
        return gbLoadForecast;
    }
    /**
     * 
     * @param gbLoadForecast
     */
    public void setGbLoadForecast(List<GbLoadForecast> gbLoadForecast) {
        this.gbLoadForecast = gbLoadForecast;
    }

...



Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com.intellex.marksist.hbn.model.GbLoadForecast.gbCapacityEntity references an unknown entity: java.util.List
...
Рейтинг: 0 / 0
13.03.2012, 11:08:16
    #37702151
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,
минимальный код до ошибки приведи
...
Рейтинг: 0 / 0
13.03.2012, 11:11:00
    #37702159
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,

private List<GbCapacityEntity> gbCapacityEntity; этого не понял.
можнт просто
private GbCapacityEntity gbCapacityEntity; ?
...
Рейтинг: 0 / 0
13.03.2012, 11:18:23
    #37702183
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Приветствую, Petro123!

Собственно, двунаправленная ассоциация - MARKSIST.GB_CAPACITY AS A 1..1 ---- 0..* MARKSIST.GB_LOAD_FORECAST AS B и попытка удалить все связанные записи из B при соответствующей записи из А. Приводит к такому вот исключению.
...
Рейтинг: 0 / 0
13.03.2012, 11:19:02
    #37702186
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Приветствую, Озверин!

Сейчас попробую, спасибо.
...
Рейтинг: 0 / 0
13.03.2012, 11:25:09
    #37702204
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,
Озверин прав, в НЕ главном классе (коллекции) должна быть ссылка на родителя
2.
в НЕ главном классе нужно убрать каскад.
...
Рейтинг: 0 / 0
13.03.2012, 11:44:17
    #37702264
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Несколько модифицировал, убрал каскад в не главном классе, добавил ссылку -

Код: 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.
...
@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_LOAD_FORECAST")
public class GbLoadForecast {
	@Id	
	@Column(name = "ORG_ID")
	private Integer orgId;
...
	@ManyToOne
    private GbCapacityEntity gbCapacityEntity;
	/**
	 * 
	 * @return
	 */
    public GbCapacityEntity getGbLoadForecast() {
        return gbCapacityEntity;
    }
    /**
     * @param gbLoadForecast
     */
    public void setGbLoadForecast(GbCapacityEntity gbCapacityEntity) {
        this.gbCapacityEntity = gbCapacityEntity;
    }
...

@Entity
@Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.NONE)
@Table(name = "MARKSIST.GB_CAPACITY")
public class GbCapacityEntity {
	@Id
	@Column(name = "ORG_ID")
	private Integer orgId;
	
...	
	@OneToMany(targetEntity=com.intellex.marksist.hbn.model.GbLoadForecast.class, cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
	@JoinTable(name="MARKSIST.GB_LOAD_FORECAST",joinColumns={@JoinColumn(name="ORG_ID")},inverseJoinColumns={@JoinColumn(name="ORG_ID")})
	@OnDelete(action=OnDeleteAction.CASCADE)
	private List<GbLoadForecast> gbLoadForecast;
	/**
	 * 
	 * @return
	 */
    public List<GbLoadForecast> getGbLoadForecast() {
        return gbLoadForecast;
    }
    /**
     * 
     * @param gbLoadForecast
     */
    public void setGbLoadForecast(List<GbLoadForecast> gbLoadForecast) {
        this.gbLoadForecast = gbLoadForecast;
    }
...



Теперь такое исключение -
[java] Caused by: org.hibernate.MappingException: only inverse one-to-many associations may use on-delete="cascade": com.intellex.marksist.hbn.model.GbCapacityEntity.gbLoadForecast
...
Рейтинг: 0 / 0
13.03.2012, 11:48:21
    #37702274
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Подозреваю, не достает аттрибутов в
Код: java
1.
@ManyToOne

.
...
Рейтинг: 0 / 0
13.03.2012, 11:51:35
    #37702288
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,

@OnDelete(action=OnDeleteAction.CASCADE) - лишнее видимо. Уберите, при CASCADE=ALL итак удалить должен.
...
Рейтинг: 0 / 0
13.03.2012, 11:53:12
    #37702293
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,

inverseJoinColumns - лишнее (оно для много-много)
...
Рейтинг: 0 / 0
13.03.2012, 12:01:03
    #37702322
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Озверин@OnDelete(action=OnDeleteAction.CASCADE) - лишнее видимо. Уберите, при CASCADE=ALL итак удалить должен.
Petro123inverseJoinColumns - лишнее (оно для много-много)

Все, клево, теперь работает. Большое спасибо!
...
Рейтинг: 0 / 0
13.03.2012, 13:14:04
    #37702532
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Слетел селект -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
	    String hql = "FROM com.intellex.marksist.hbn.model.GbLoadForecast E " +
		 			 "WHERE E.orgId = :id1 AND E.cargoGroup = :id2";

...
		query.setParameter("id1", orgId);
		query.setParameter("id2", gcId);
                List results = query.list();
...



SQLGrammar яросте -
[java] Caused by: java.sql.SQLException: ORA-00904: "GBLOADFORE0_"."GBCAPACITYENTITY_ORG_ID": ???????????? ?????????????
...
Рейтинг: 0 / 0
13.03.2012, 13:17:59
    #37702536
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
В консоль свалилось примерно следующее -


[java] Hibernate:
[java] select
[java] gbloadfore0_.ORG_ID as ORG1_4_,
[java] gbloadfore0_.GRUP_GRUZ as GRUP2_4_,
[java] gbloadfore0_.CHANGER_ID as CHANGER3_4_,
[java] gbloadfore0_.FST_2012 as FST4_4_,
[java] gbloadfore0_.FST_2013 as FST5_4_,
[java] gbloadfore0_.FST_2014 as FST6_4_,
[java] gbloadfore0_.FST_2015 as FST7_4_,
[java] gbloadfore0_.gbCapacityEntity_ORG_ID as gbCapac11_4_,
[java] gbloadfore0_.RW_ID as RW8_4_,
[java] gbloadfore0_.SENDER_ID as SENDER9_4_,
[java] gbloadfore0_.ST_ID as ST10_4_
[java] from
[java] MARKSIST.GB_LOAD_FORECAST gbloadfore0_
[java] where
[java] gbloadfore0_.ORG_ID=?
[java] and gbloadfore0_.GRUP_GRUZ=?


[java] 4201 ["http-apr-8080"-exec-7] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 904, SQLState: 42000
[java] 4201 ["http-apr-8080"-exec-7] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-00904: "GBLOADFORE0_"."GBCAPACITYENTITY_ORG_ID": ???????????? ?????????????
...
Рейтинг: 0 / 0
13.03.2012, 13:29:57
    #37702566
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,

Если у тебя есть двунаправленное отношение, то с одной из сторон должен быть задан аттрибут mappedBy. Если аттрибут не задать то hibernate не понимает что это два конца одного и того же отношения, а воспринимает как два разных отношения.
...
Рейтинг: 0 / 0
13.03.2012, 13:32:53
    #37702572
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Приветствую, vas0!

Сейчас попробую задать, спасибо.
...
Рейтинг: 0 / 0
13.03.2012, 14:21:41
    #37702707
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Собственно, картина не изменилась, тот же самый стек- трейс при:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// GbCapacityEntity class
...
	@OneToMany(targetEntity=com.intellex.marksist.hbn.model.GbLoadForecast.class, cascade={CascadeType.ALL}, fetch=FetchType.LAZY, mappedBy="gbCapacityEntity")
	@JoinTable(name="MARKSIST.GB_LOAD_FORECAST",joinColumns={@JoinColumn(name="ORG_ID")})
	private List<GbLoadForecast> gbLoadForecast;

// GbLoadForecast class
...
	@ManyToOne
	private GbCapacityEntity gbCapacityEntity;

...
...
Рейтинг: 0 / 0
13.03.2012, 14:28:51
    #37702726
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,
пересоздай базу, перегрузи комп и сходи на обед.
Наверно, намусорил в модели экспериментами.
...
Рейтинг: 0 / 0
13.03.2012, 14:40:53
    #37702764
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Petro123, все может быть. Пересоздать базу, видимо, придется, поскольку при -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
...

// GbCapacityEntity class
...
	@OneToMany(targetEntity=com.intellex.marksist.hbn.model.GbLoadForecast.class, cascade={CascadeType.ALL}, fetch=FetchType.LAZY, mappedBy="gbCapacityEntity")
	@JoinTable(name="MARKSIST.GB_LOAD_FORECAST",joinColumns={@JoinColumn(name="ORG_ID")})
	private List<GbLoadForecast> gbLoadForecast;

// GbLoadForecast class
...
	@ManyToOne
	private GbCapacityEntity gbCapacityEntity;
        @JoinColumn(name = "ORG_ID")
...



..получается -


[java] Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.intellex.marksist.hbn.model.GbLoadForecast column: ORG_ID (should be mapped with insert="false" update="false")


Видимо, одинаковые имена id- полей объединяемых таблиц не позволяют применить этот вариант.
...
Рейтинг: 0 / 0
13.03.2012, 14:46:28
    #37702783
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
ivanov-void,

По моему @JoinTable у тебя ерунда какая то. Дополнительной таблицы соединения ты же не создаешь? Удали эту аннотацию.
...
Рейтинг: 0 / 0
13.03.2012, 14:48:36
    #37702787
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
vas0, нет, не создаю. Сейчас попробую, благодарю.
...
Рейтинг: 0 / 0
13.03.2012, 15:11:45
    #37702866
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Мм.. там косячина в get/ set, немного напутано. Краткий синопсис выложу чуть позже, думаю, дело в этих методах.
...
Рейтинг: 0 / 0
13.03.2012, 15:24:01
    #37702912
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate : объединение delete clause
Вобщем, не удалось добиться желаемого эффекта:

Код: 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.
...
// GbCapacityEntity class

	@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="gbCapacityEntity")
	private List<GbLoadForecast> gbLoadForecast;
	/**
	 * 
	 * @return
	 */
    public List<GbLoadForecast> getGbLoadForecast() {
        return gbLoadForecast;
    }
    /**
     * 
     * @param gbLoadForecast
     */
    public void setGbLoadForecast(List<GbLoadForecast> gbLoadForecast) {
        this.gbLoadForecast = gbLoadForecast;
    }

...

// GbLoadForecast class

	@ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY)
	private GbCapacityEntity gbCapacityEntity;
	/**
	 * @return
	 */
    public GbCapacityEntity getGbCapacityEntity() {
        return gbCapacityEntity;
    }
    /**
     * @param gbLoadForecast
     */
    public void setGbCapacityEntity(GbCapacityEntity gbCapacityEntity) {
        this.gbCapacityEntity = gbCapacityEntity;
    }
...

// Запрос

	    String hql = "FROM com.intellex.marksist.hbn.model.GbLoadForecast E " +
		 			 "WHERE E.orgId = :id1 AND E.cargoGroup = :id2";
	    
		Session session = HibernateUtil.getMarksistSessionFactory().openSession();
		session.beginTransaction();
		
		Query query = session.createQuery(hql);
		query.setParameter("id1", orgId);
		query.setParameter("id2", gcId);
		List results = query.list();
		session.close();
...



На query.list(); вылетает -

[java] 4085 ["http-apr-8080"-exec-10] ERROR org.hibernate.util.JDBCExceptionReporter - ORA-00904: "GBLOADFORE0_"."GBCAPACITYENTITY_ORG_ID": ???????????? ?????????????
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate : объединение delete clause / 25 сообщений из 67, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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