Hibernate Query DetachedCriteria VS bulkUpdate SQL с использованием Collection с "in" причиной проблемы - PullRequest
0 голосов
/ 14 ноября 2010

Я столкнулся с проблемой того, как использовать SQL "in" в массовом обновлении Hibernate.

Пример:

Страна относится к типу enum.

Обычный оператор SQL

Update Persons SET country = Country.China
WHERE country IN (Country.HK, Country.Taiwan);

Спящий режим с использованием DetachedCriteria

DetachedCriteria criteria= DetachedCriteria.forClass(Persons.class)
 .add(Property.forName("country").in(countryList));
List<Persons> personsList = getHibernateTemplate().findByCriteria(criteria);

for(Persons persons : personsList){
     person.setCountry(Country.China);
}

personsDao.updateAll(personsList);
personsDao.flush();

Режим гибернации с использованием объемного обновления - не работает!

getHibernateTemplate().bulkUpdate(
"select * from Persons where country in (?)",
 new Object[] {countryList});

Сообщение об ошибке:

[Lcom.model.Persons.Country; cannot be cast to java.lang.Enum]

Но я попробовал это. Оно работает. [Не используя объект: я жестко его кодирую]

getHibernateTemplate().bulkUpdate(
"select * from Persons where country in (" + Country.HK + "," + Country.Taiwan +" )" );

Здесь вопрос:
1. Можем ли мы использовать Object [] с предложением «in»?
2. Интересно, почему система знает, что Объект является Перечислением Страны.

Пример:

getHibernateTemplate().bulkUpdate(
"select * from Persons where country = ?",
 new Object[] {country});

==> Это рабочий и исполняемый файл.

  1. Кроме коллекции Enum (пример выше), List или String [] также не работают, используя Object с предложением «in».

Надеюсь, вы, ребята, сможете решить мою проблему. Благодарю. -fsloke

1 Ответ

0 голосов
/ 26 апреля 2011

хорошо, у меня просто простой вопрос. Вы уверены, что ваш countryList является списком стран, а не одним объектом округа? Если вы используете в (?) Он ожидает коллекцию.

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