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使用无处不在。您的会话变量在方法内声明和初始化。因此,每个调用中的变量引用都是不同的。