2014-12-08 5 views
0

Мне любопытно, что должно быть результатом при создании объекта. Затем я удаляю объект, а затем пытаюсь загрузить этот объект из базы данных. Я думаю, это должно быть «null». В одной таблице я получаю «нуль» во второй таблице, я ничего не получаю.Результат удаления объекта из базы спящего режима

Создать:

public void createPerson(Person p) { 
    session.beginTransaction(); 
    session.save(p); 
    session.getTransaction().commit(); 
    logger.info("Person saved successfully!"); 
} 

Delete:

public void deletePerson(int id) { 
    session.beginTransaction(); 

    Person p = getPersonById(id); 
    if(p != null){ 
     session.delete(p); 
     session.getTransaction().commit(); 
    } 
    if(getPersonById(id) == null){ 
    logger.info("Person deleted successfully!"); 
    }else{ 
     logger.info("Something went wrong! Person hasn't been deleted!");   
    } 

} 

и нагрузки:

public Person getPersonById(int id) { 
    session.beginTransaction(); 
    Person p = (Person) session.load(Person.class, id); 
    logger.info("Person loaded successfully!"); 
    return p; 

} 

И я ничего не получают. В чем проблема?

+2

Что вы подразумеваете под 'nothing'? – Eypros

+0

Совершенно ничего. Я не знаю, как это описать. Я ничего не вижу. Это не дает мне никакой ценности, объекта, что угодно. Когда я пытаюсь System.out.print, он ничего не пишет. Даже когда я пытаюсь сделать System.out.print (результат «blabla» +); -> Я не могу найти даже предложение «blabla» в журнале. : D Это совершенно странно. – jmeno

+0

Вы уверены, что исключение не исключено? Проверяете ли вы свою программу на отладчике? Это «ничего» не имеет смысла. – Eypros

ответ

0

В соответствии с моим пониманием вы должны очистить свой контекст после операции create/delete. Процесс flush синхронизирует состояние базы данных с состоянием сеанса путем обнаружения изменений состояния и выполнения операторов SQL.

if(p != null){ 
     session.delete(p); 
     session.getTransaction().commit(); 
session.setFlushMode(FlushModeType.COMMIT); 
    } 

Вы можете прочитать о флеш-режиме Hibernate flush mode.

0

Где совершить нарушение в deletePerson? и фиксация снова в getPersonById?

Исправить код, который вы увидите, что вы не получите объект обратно по ID, который вы удаляете.

+0

Commit in deletePerson находится в строке 7. И я думал, что фиксация важна только тогда, когда я что-то меняю, поэтому она не обязательно должна быть в getPersonById. Однако я положил его туда, и это ничего не изменило. – jmeno

+0

положите попытку поймать всюду и распечатать след, чтобы увидеть, что-то пошло не так. также, как только вы удаляете проверку, DB записывает фактическую запись – Nazgul

Смежные вопросы