数据库中hibernate保存的问题

时间:2013-05-27 11:25:15

标签: java mysql hibernate hql

我遇到了hibernate的问题,问题是当我保存在数据库中但是当我尝试找到最后一次插入时,他找不到直到我在数据库中做了一些动作,就像我找到或删除其他数据一样。

这是我保存的方式:

    SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    session = sessionFactory.openSession();
    Transaction tx = null;
    try {
        tx = session.beginTransaction();
        session.saveOrUpdate(o);
        session.saveOrUpdate(o1); // o and o1 are two differents objects
        tx.commit();

    } catch (Exception e) {
        if (tx != null) {
            tx.rollback();
        }
    }

这就是我在插入后尝试在数据库中查找的方式:

 public List getUserNames(int startID, int endID) {
    List<User> userList = null;
    try {
        org.hibernate.Transaction tx = session.beginTransaction();
        Query q = session.createQuery("select u from User u ");
        userList = (List<User>) q.list();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return userList;
}

我尝试了很多东西但没有什么区别,比如改变saveOrUpdate来合并或者只是保存,但没有任何改变这一点。 感谢任何可以提供帮助的人。

2 个答案:

答案 0 :(得分:0)

不确定,但在开始迭代结果之前,Hibernate不会执行查询(在你的情况下是userList)。

尝试在关闭会话之前迭代userList。

请参阅此处的示例:Hibernate Query Language, Using HQL Select Query

答案 1 :(得分:0)

在将数据保存到数据库http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/Session.html#refresh(java.lang.Object)之前,尝试refreshing会话状态。通常不建议这样做,因为它有自己的后果,即不保存会话对象先前获取的数据。您的堆栈跟踪将有助于提供合适的解决方案。