Hibernate表更新错误

时间:2013-08-25 07:26:28

标签: java hibernate

我的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;
}
}

让我知道我的代码中是否有错误?

3 个答案:

答案 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) ;
    }

另一方面,您应该生成新会话并执行其他操作。