У меня есть таблица для студентов и вы хотите удалить всех учеников в классе.Как удалить по критериям в спящем режиме?
Так что мой SQL запрос будет выглядеть следующим образом:
delete from student where classId = 333
Как я могу сделать это, используя спящий режим с критериями?
Мне нужно это, поэтому я могу поместить в один из моих базовых классов, чтобы использовать любые объекты DAO, которые простираются от него. Поэтому я могу сделать этот родословный во всех своих объектах DAO.
В настоящее время я создал общий метод, который будет подан в Student Object - вызывает метод находки, которая использует критерии, чтобы получить список, а затем я партия удалять по одной сделке следующим образом:
public boolean deleteByCriteria(Object deleteObject) {
List deleteObjectList = find(deleteObject);
if (deleteObjectList == null)
return false;
return deleteAll(deleteObjectList);
}
public boolean deleteAll(List deleteObjectList) {
if (logger.isDebugEnabled()) {
logger.debug("Entered BaseSchoolRollBookDAO -> delete");
logger.debug("Object for batch deletion [" + deleteObjectList + "]");
}
boolean result = false;
Transaction tx = null;
// Get CurrentSession from HibernateUtils
Session session = HibernateUtils.getSession();
// Start transaction
tx = session.beginTransaction();
// Create new Criteria to be passed
try {
int flushCount = 0;
for (Object deleteObject : deleteObjectList) {
session.delete(deleteObject);
flushCount++;
if (flushCount % 20 == 0) {
session.flush();
session.clear();
}
}
tx.commit();
result = true;
} catch (HibernateException e) {
logger.fatal("Exception in executing batch Delete query", e);
if (tx != null && tx.isActive())
tx.rollback();
}
return result;
}
Интересно, удалит ли в цикле проблемы с производительностью? – muhamadto