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

Возможно- ли как- то объединить 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
Hibernate : объединение delete clause
    #37701640
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объеденить для чего? А почему каскадом не сделать?
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37701645
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Blazkowicz!

Да, наверное, лучше каскадом. Спасибо.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702139
Фотография 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.
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
Hibernate : объединение delete clause
    #37702151
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
минимальный код до ошибки приведи
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702159
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,

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

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

Сейчас попробую, спасибо.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702204
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
Озверин прав, в НЕ главном классе (коллекции) должна быть ссылка на родителя
2.
в НЕ главном классе нужно убрать каскад.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702264
Фотография 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.
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
Hibernate : объединение delete clause
    #37702274
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю, не достает аттрибутов в
Код: java
1.
@ManyToOne

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

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

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

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

Код: 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
Hibernate : объединение delete clause
    #37702536
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В консоль свалилось примерно следующее -


[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
Hibernate : объединение delete clause
    #37702566
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,

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

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

Код: 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
Hibernate : объединение delete clause
    #37702726
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,
пересоздай базу, перегрузи комп и сходи на обед.
Наверно, намусорил в модели экспериментами.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702764
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Hibernate : объединение delete clause
    #37702783
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanov-void,

По моему @JoinTable у тебя ерунда какая то. Дополнительной таблицы соединения ты же не создаешь? Удали эту аннотацию.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702787
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0, нет, не создаю. Сейчас попробую, благодарю.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702866
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мм.. там косячина в get/ set, немного напутано. Краткий синопсис выложу чуть позже, думаю, дело в этих методах.
...
Рейтинг: 0 / 0
Hibernate : объединение delete clause
    #37702912
Фотография 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.
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
25 сообщений из 67, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate : объединение delete clause
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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