Java 我的hibernate事务和会话有什么问题
我有如下代码Java 我的hibernate事务和会话有什么问题,java,hibernate,Java,Hibernate,我有如下代码 class HibernateTest { public static void main(final String[] args) { final HibernateTest objHibernateTest = new HibernateTest(); objHibernateTest.saveEmployeeDetails(); objHibernateTest.saveEmployeeLeaves(); objHibernateTes
class HibernateTest {
public static void main(final String[] args) {
final HibernateTest objHibernateTest = new HibernateTest();
objHibernateTest.saveEmployeeDetails();
objHibernateTest.saveEmployeeLeaves();
objHibernateTest.saveEmployeePayment();
}
private void saveEmployeeDetails() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();//Begin Transaction
Employee e = new Employee();//consider Employee have data
session.update(e);
session.flush();
session.clear();
}
private void saveEmployeeLeaves() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.clear();
}
private void saveEmployeePayment() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.getTransaction().commit();//Commit Transaction
}
}
在上面的代码中,我首先调用saveEmployeeDetails()
,在这里我获取会话并开始事务处理,然后调用flush()和clear()
,以进行缓存
我在saveEmployeeLeaves()
中也做了同样的事情
在函数saveEmployeePayment()
中,我执行一些操作并保存员工详细信息
但在此场景中,只有付款
详细信息存储在db中,而不是员工详细信息
和休假详细信息
为什么会这样
感谢高级……您需要提交每次更新的事务。在最后一个方法调用中更新不会提交以前的所有内容。
会话
变量的范围仅限于方法块
private void saveEmployeeDetails() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();//Begin Transaction
Employee e = new Employee();//consider Employee have data
session.update(e);
session.flush();
session.getTransaction().commit(); // Commit after update
session.clear();
}
private void saveEmployeeLeaves() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.getTransaction().commit(); //Commit after update
session.clear();
}
private void saveEmployeePayment() {
final Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Employee e = new Employee();//consider Employee have data
session.save(e);
session.flush();
session.getTransaction().commit();//Commit Transaction
}
请更新您的问题,以显示您认为
Payment
和Leave
对象将被持久化的位置和原因。您的数据模型类中很可能存在持久化声明错误。显示您的数据模型类的代码。@拉斐尔哪个数据模型……我的意思是<代码>雇员< /Cord>类。考虑雇员对象具有正确的值……我从会话工厂中获取会话,所以它的单个对象i使用无处不在。您的会话变量在方法内声明和初始化。因此,每个调用中的变量引用都是不同的。