0

データベースにレコードを挿入するためのコードをアクションクラスに書いていますが、別のアクションクラスを使用して他のレコードが挿入された後に後でコミットしたいので、同時にコミットしません。私は冬眠するのが初めてで、これを行う方法がわかりません。どうか、私を導いてください。私はstruts 2を使用しています。よろしくお願いします。アクションで次のコードを使用して、コミットせずにデータベースにレコードを挿入しています

    public void addExamDetails( ExamDetails examDetails){
       try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.beginTransaction();
            session.save(examDetails);
       } catch (Exception e) {
            System.out.println("ExamDetailsDAO.addExamDetails()");
            e.printStackTrace();
       }
    }

この後、別のアクションクラスで次のコードを書いて他のレコードを挿入し、同時にコミットしていますが、前の挿入をコミットできません

public void addExamShift( ExamShift examShift){
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.getTransaction();
            transaction.begin();
            session.save(examShift);
            transaction.commit();
        } catch (Exception e) {
            System.out.println("ExamShiftDAO.addExamShift()");
            e.printStackTrace();
        }
    }

わかりました、私はそれらの2つのアクションを投稿しています。私を案内してください。これは、試験の詳細が挿入される最初のアクションですが、コミットは行われません。

package com.zealsofts.schoolmanagement;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.zealsofts.schoolmanagement.hibernate.ExamDetails;
import com.zealsofts.schoolmanagement.hibernate.ExamDetailsDAO;

public class AddExamDetailsAction extends ActionSupport implements ModelDriven<ExamDetails> {

    private ExamDetails examDetails = new ExamDetails();
    private ExamDetailsDAO examDetailsDAO = new ExamDetailsDAO();

    private int examCode;

    public ExamDetails getModel(){
        return examDetails;
    }

    public String execute(){
        String result = ERROR;
        try{
            examDetailsDAO.addExamDetails(examDetails);
            result = SUCCESS;
        }
        catch (Exception e) {
            System.out.println("AddExamDetailsAction.execute()");
            e.printStackTrace();
        }
        return result;
    }

    public int getExamCode(){
        return examCode;
    }

    public void validate(){
        if(examDetails.getExamName().trim().equals("") ){
            addFieldError("examName", "Exam Name is required");
        }
        if(examDetails.getAcademicSession().equals("-1")){
            addFieldError("academicSession", "Session is Required");
        }

    }

}

この後、試験のシフトの詳細を挿入するために次のアクションが呼び出されます。そして、両方のトランザクションのコミットが行われる場所です。

package com.zealsofts.schoolmanagement;

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

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.zealsofts.schoolmanagement.hibernate.ExamShift;
import com.zealsofts.schoolmanagement.hibernate.ExamShiftDAO;

public class AddShiftDetailsAction extends ActionSupport implements ModelDriven<ExamShift> {

    private ExamShift examShift = new ExamShift();

    private ExamShiftDAO examShiftDAO = new ExamShiftDAO();

    private SessionFactory sessionFactory;
    private Session session;

    private boolean shiftError;
    private boolean startHourError;
    private boolean startMinuteError;
    private boolean startTimeSuffixError;
    private boolean endHourError;
    private boolean endMinuteError;
    private boolean endTimeSuffixError;

    private boolean validationFailed;


    public ExamShift getModel(){
        return examShift;
    }

    public String execute(){
        String result = ERROR;
        try{

            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.getCurrentSession();
            examShiftDAO.addExamShift(examShift);
            result = SUCCESS;
        }
        catch (Exception e) {
            System.out.println("AddShiftDetailsAction.execute()");
            e.printStackTrace();
        }
        return result;
    }

    public boolean getShiftError(){
        return shiftError;
    }
    public boolean getStartHourError(){
        return startHourError;
    }
    public boolean getStartMinuteError(){
        return startMinuteError;
    }
    public boolean getStartTimeSuffixError(){
        return startTimeSuffixError;
    }
    public boolean getEndHourError(){
        return endHourError;
    }
    public boolean getEndMinuteError(){
        return endMinuteError;
    }
    public boolean getEndTimeSuffixError(){
        return endTimeSuffixError;
    }
    public boolean getValidationFailed(){
        return validationFailed;
    }

    public void validate(){
        try{
            if(examShift.getShift() == 0 ){
                shiftError = true;
                validationFailed = true;
                addFieldError("shift", "Exam Shift is required");
                System.out.println("Action : shift");
            }
            if(examShift.getStartHour() == -1){
                startHourError = true;
                validationFailed = true;
                addFieldError("startHour", "Start Time is Required");
                System.out.println("Action : startHour");
            }
            if(examShift.getStartMinute() == -1){
                startMinuteError = true;
                validationFailed = true;
                addFieldError("startMinute", "Start Time is Required");
                System.out.println("Action : startMinute");
            }
            if(examShift.getStartTimeSuffix().equals("-1")){
                startTimeSuffixError = true;
                validationFailed = true;
                addFieldError("startTimeSuffix", "Start Time is Required");
                System.out.println("Action : startTimeSuffix");
            }
            if(examShift.getEndHour() == -1){
                endHourError = true;
                validationFailed = true;
                addFieldError("endHour", "End Time is required");
                System.out.println("Action : endHour");
            }
            if(examShift.getEndMinute() == -1){
                endMinuteError = true;
                validationFailed = true;
                addFieldError("endMinute", "End Time is required");
                System.out.println("Action : endMinute");
            }
            if(examShift.getEndTimeSuffix().equals("-1")){
                endTimeSuffixError = true;
                validationFailed = true;
                addFieldError("endTimeSuffix", "End Time is required");
                System.out.println("Action : endTimeSuffix");
            }
        }
        catch (Exception e) {
            System.out.println("AddShiftDetailsAction.validate()");
            e.printStackTrace();
        }
    }

}

後の挿入 ( Shift Details ) は正常にコミットされますが、前の挿入 ( Exam Details ) はコミットされません。以下は、これらのレコードをデータベースに挿入するための 2 つの DAO です。

package com.zealsofts.schoolmanagement.hibernate;

import java.util.ArrayList;
import java.util.List;

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

public class ExamDetailsDAO {

    SessionFactory sessionFactory;
    Session session;
    Transaction transaction;

    public List<ExamDetails> getExamDetails(){
        List<ExamDetails> examDetails = new ArrayList<ExamDetails>();
        try{
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.openSession();
            examDetails = session.createQuery("FROM ExamDetails").list();
        }
        catch (Exception e) {
            System.out.println("ExamDetailsDAO.getExamDetails()");
            e.printStackTrace();
        }
        return examDetails;
    }

    public void addExamDetails( ExamDetails examDetails){
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.beginTransaction();
            session.save(examDetails);
            transaction.commit();
        } catch (Exception e) {
            System.out.println("ExamDetailsDAO.addExamDetails()");
            e.printStackTrace();
        }
    }
    public void editExamDetails( ExamDetails examDetails ){
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            transaction.commit();
        } catch (Exception e) {
            System.out.println("ExamDetailsDAO.editExamDetails()");
            e.printStackTrace();
        }
    }

}


package com.zealsofts.schoolmanagement.hibernate;

import java.util.ArrayList;
import java.util.List;

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

public class ExamShiftDAO {

    SessionFactory sessionFactory;
    Session session;
    Transaction transaction;

    public List<ExamShift> getExamShifts(){
        List<ExamShift> examShifts = new ArrayList<ExamShift>();
        try{
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.openSession();
            examShifts = session.createQuery("FROM ExamShift").list();
        }
        catch (Exception e) {
            System.out.println("ExamDetailsDAO.getExamDetails()");
            e.printStackTrace();
        }
        return examShifts;
    }

    public void addExamShift( ExamShift examShift){
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.getCurrentSession();
            transaction = session.getTransaction();
            transaction.begin();
            session.save(examShift);
            transaction.commit();
        } catch (Exception e) {
            System.out.println("ExamShiftDAO.addExamShift()");
            e.printStackTrace();
        }
    }
    public void editExamShift( ExamShift examShift ){
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            transaction.commit();
        } catch (Exception e) {
            System.out.println("ExamShiftDAO.editExamShift()");
            e.printStackTrace();
        }
    }
}

私を助けてください。

4

1 に答える 1

0

最後に問題を解決しました。問題は、すべてのクラスで新しい SessionFactory オブジェクトを取得していたため、毎回新しいトランザクションを取得していたことです。お時間を割いていただきありがとうございます

于 2013-09-01T07:53:42.373 に答える