我很好奇创建对象时应该产生什么结果,然后我删除对象,然后尝试从数据库加载此对象。我想它应该是"空"。在一个表中,我在第二个表中收到"null",我什么也没收到。
创造:
public void createPerson(Person p) {
session.beginTransaction();
session.save(p);
session.getTransaction().commit();
logger.info("Person saved successfully!");
}
删除:
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;
}
我什么也没收到。问题出在哪里?
根据我的理解,您应该在创建/删除操作后刷新上下文。刷新过程通过检测状态更改和执行 SQL 语句来将数据库状态与会话状态同步。
if(p != null){
session.delete(p);
session.getTransaction().commit();
session.setFlushMode(FlushModeType.COMMIT);
}
您可以阅读有关刷新模式休眠刷新模式的信息。
deletePerson
中的提交在哪里? 和 getPersonById
中的再次提交?
修复您会看到的代码,即您没有通过 ID 1 取回实体,您将其删除。