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();
}
}
上
詳細情報を動作するはず
Session.refresh(Object)
てみてください。また
または
のように取得します。私のコードにstush()をフラッシュするそれは表示中に古いレコードを取るでしょう。 –
フラッシュした後、別のセッションを開始するのではなく、同じセッションを使用してみてください –
はいセッションを使用しました。 –