获取旧记录

时间:2017-03-20 06:01:12

标签: spring hibernate orm transactions

我使用HQL编写了一个简单的Hibernate程序。 我既包括SELECT也包括UPDATE。当我更新任何记录并尝试显示它然后它返回旧记录。 我在UPDATE之后提交了事务,但它仍然获取旧记录。 当我为SELECT包含一个新会话时,它会获取更新的新记录。我是否每次都需要创建一个新的会话来获取最新的记录?

    AppMain.class:
    package com.HQL.Main;

    import java.util.List;

    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    import com.HQL.Model.Employee;

    public class AppMain {

        public static void main(String[] args) {
            SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            Query query = null;
            List<Employee> list1 = null;

            query = session.createQuery("from Employee");
            list1 = query.list();
            for (Employee emp : list1) {
                System.out.println("\nEmployee ID:\t" + emp.getId() + "\nEmployee name:\t" + emp.getName()
                        + "\nEmployee Age:\t" + emp.getAge() + "\nEmployee Salary:" + emp.getSalary());
            }

            query = session.createQuery("update Employee set age=:empname where id=:eid");
            query.setParameter("empname",36);
            query.setParameter("eid",3);
            int result = query.executeUpdate();
            System.out.println("Result:"+result);
            tx.commit();

            session = sessionFactory.openSession();
            Query query1 = session.createQuery("from Employee");
            list1 = query1.list();
            for (Employee emp : list1) {
                System.out.println("\nEmployee ID:\t" + emp.getId() + "\nEmployee name:\t" + emp.getName()
                        + "\nEmployee Age:\t" + emp.getAge() + "\nEmployee Salary:" + emp.getSalary());
            }       
            //tx.commit();
            session.close();
            sessionFactory.close();
        }
    }

1 个答案:

答案 0 :(得分:0)

尝试使用session.flush();session.clear();

刷新会话会强制Hibernate将Session的内存中状态与数据库同步

清除完全清除会话。它驱逐所有已加载的对象并取消所有挂起的操作并清除所有对象的缓存。

更新后尝试刷新并检索

        int result = query.executeUpdate();
        System.out.println("Result:"+result);
        tx.commit();
        session.flush();
        session.clear();

也可以尝试使用Session.refresh(Object)

这应该有效

有关https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html

的更多信息