Как обнаружить конфликт столбцов с Hibernate? - PullRequest
1 голос
/ 29 апреля 2010

Итак, допустим, у меня есть ArrayList, полный продуктов, которые нужно добавить в базу данных через Hibernate.В базе данных уже есть большое количество товаров.У каждого продукта есть идентификатор.Обратите внимание, что это НЕ ПК, автоматически сгенерированный Hibernate.

Мои вопросы: каков наилучший способ обнаружения конфликтов с этим идентификатором?Я ищу относительно эффективный способ получения из базы данных Списка продуктов, имеющих общий идентификатор с любым из Продуктов в моем ArrayList.Это все в одной таблице с именем Products, а атрибут ID находится в столбце ProductID.

Я сделал это, собрав список всех продуктов в базе данных, и сравнил каждый из них с каждой записью вмой ArrayList - но это серьезно неэффективно, и я не думаю, что это будет хорошо работать с большой базой данных.Как это должно быть сделано?Благодарю.Я говорю «относительно» эффективный, потому что эффективность не является первостепенной задачей, но тестирование с таблицей из ~ 1000-5000 строк не должно занять много времени.Помощь?

РЕДАКТИРОВАТЬ * Я очень новичок в спящем режиме, и ниже это лучшее, что я придумал.Как это выглядит?

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList
    Query query = session.createQuery("select product from Product product where product.id = :id");
    query.setLong("id", id);
    for(int i = 0; i < query.list().size(); i++){
        listOfConflictingProducts.add((Product) query.list().get(i));
    }
}

1 Ответ

1 голос
/ 29 апреля 2010

Я бы вызвал query.list () только один раз: в противном случае запрос может быть перезапущен каждый раз:

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList
    Query query = session.createQuery("select product from Product product where product.id = :id");
    query.setLong("id", id);
    List result = query.list();
    for(int i = 0; i < result.size(); i++){
        listOfConflictingProducts.add((Product) result.get(i));
    }
}

Или, проще говоря:

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList
    Query query = session.createQuery("select product from Product product where product.id = :id");
    query.setLong("id", id);
    for(Object obj: query.list()){
        listOfConflictingProducts.add((Product)obj);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...