Ho una tabella studenti e voglio eliminare tutti gli studenti in una classe.Come eliminare in base ai criteri in sospensione?
Quindi la mia domanda di SQL sarà simile:
delete from student where classId = 333
Come posso fare questo usando Hibernate con criteri?
Ho bisogno di questo in modo da poter inserire una delle mie classi base da utilizzare da qualsiasi oggetto DAO che si estende da esso. Quindi posso renderlo generico su tutti i miei oggetti DAO.
Attualmente ho creato un metodo generico che preso in oggetto Student - richiama il metodo find che utilizza i criteri per ottenere l'elenco e poi faccio una partita a cancellare sotto una transazione come segue:
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;
}
Mi chiedo, l'eliminazione di un ciclo causerà problemi di prestazioni? – muhamadto