удалить запрос в JPA2 со связанными объектами - PullRequest
2 голосов
/ 04 августа 2011

Я пытаюсь выполнить массовое удаление

@NamedQuery(name=CalcData.DELETE, 
query="delete from CalcData as model where model.dataLocation.locCountries = :locCountries and model.locPeriod= :locPeriod")

Проблема в том, что hibernate переводит это в

Hibernate: 
delete 
from
    smart_rise.Calc_Data cross 
join
    smart_rise.Data_Location datalocati1_ 
where
    CountryID=? 
    and Period=?

Это вызывает исключение при выполнении именованного запроса

=== 2011-08-04 10:53:30,719 [l0-6] ERROR JDBCExceptionReporter - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cross join smart_rise.Data_Location datalocati1_ where CountryID=6 and Period=10' at line 1
=== 2011-08-04 10:53:30,719 [l0-6] ERROR PeriodsDMI - org.hibernate.exception.SQLGrammarException: could not execute update query
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute update query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)

Есть идеи, что пошло не так?

спасибо, Здары

1 Ответ

3 голосов
/ 04 августа 2011

Вы не можете удалить с помощью объединения.

Если locCountries является проиндексированной коллекцией Попробуйте выполнить запрос:

delete from CalcData as model 
where :locCountries in indicies(model.dataLocation.locCountries)
and model.locPeriod= :locPeriod

Если нет:

delete from CalcData as model 
where model.id not in (select id from CalcData as m where model.dataLocation.locCountries = :locCountries  and model.locPeriod= :locPeriod
)

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...