我的web应用程序使用了hibernate mysql。我可以将记录添加到数据库而不会有任何问题。但如果我要更新最新的添加记录它将不会更新。但是,如果我重新启动服务器(tomcat),然后尝试更新它的工作。
要更新记录,应满足以下条件。
//Check record aready exist
public boolean idExists(String id) {
Session session = (Session) HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Officer> list = (List<Officer>) session.createQuery("from Officer as p where p.idno =" + "\'" + id.trim() + "\'").list();
return (list.size() > 0) ;
}
立即(返回1)添加记录它将返回0.但是一个重新启动服务器并更新记录它将起作用。我还在添加记录后验证它是否成功提交到DB。
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static{
try{
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}catch(Throwable ex){
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
让我知道我的代码中是否有错误?
答案 0 :(得分:1)
Hibernate在事务发生后不立即与数据库交互,或者在刷新会话时不会与数据库交互,它会以自己的方式管理和更新其记录以提高系统性能,如果您想立即反思使用:
session.flush();
更新记录后。
答案 1 :(得分:0)
您可以尝试flush会话。实体不会立即保留在数据库中。
session.flush();
答案 2 :(得分:0)
我认为你在这里使用交易更好。
你放session.biginTranasaction();
取而代之的是
public boolean idExists(String id) {
Session session = (Session) HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
List<Officer> list = (List<Officer>) session.createQuery("from Officer as p where p.idno =" + "\'" + id.trim() + "\'").list();
tx.commit();
if(session != null){
session.close();
}
return (list.size() > 0) ;
}
另一方面,您应该生成新会话并执行其他操作。