Только последняя строка вставляется в таблицу в спящем режиме - PullRequest
0 голосов
/ 23 мая 2018

Я работаю над проектом Java, используя Hibernate.У меня есть csv файл, который содержит более 200 данных.Я успешно получил данные из файла csv.Теперь я должен вставить эти данные в таблицу.

Проблема в том, что в таблицу добавляется только последняя строка.Другие строки не вставляются.

Схема таблицы приведена ниже:

INSERT INTO `attendence_table`
(`serial_no` int auto-increment, 
`employee_id` varchar2, 
`in_time` varchar2, 
`out_time` varchar2,
 `attend_date` date)

Класс присутствия указан ниже:

   @Entity
   @Table(name = "attendence_table")
   public class Attendence {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "serial_no")
    private int id;
    @Column(name = "employee_id")
    private String employee_id;
    @Column(name = "in_time")
    private String inTime;
    @Column(name = "out_time")
    private String outTime;
    @Column(name = "attend_date")
    private String date;



    public String getEmployee_id() {
        return employee_id;
    }

    public void setEmployee_id(String employee_id) {
        this.employee_id = employee_id;
    }

    public String getInTime() {
        return inTime;
    }

    public void setInTime(String inTime) {
        this.inTime = inTime;
    }

    public String getOutTime() {
        return outTime;
    }

    public void setOutTime(String outTime) {
        this.outTime = outTime;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

   }

Функция вставкиниже:

private static SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

public static void hibernateInsertAttendenceSession(List<Attendence> collection) {


    Session session = sessionFactory.openSession();

    session.beginTransaction();

    for (Attendence obj : collection) {
        session.save(obj);
        System.out.println("Object Added");

    }

    session.getTransaction().commit();
    session.close();
}

Для вашего удобства я также добавлю проблеск файла csv:

Test_company,TestId001,Test Name,2018/03/22,08:53:15,17:50:40
Test_company,TestId001,Test Name,2018/03/25,08:51:02,17:55:18
Test_company,TestId001,Test Name,2018/03/27,08:50:16,18:03:47
Test_company,TestId001,Test Name,2018/03/28,08:48:07,18:46:42
Test_company,TestId001,Test Name,2018/03/29,08:56:16,20:14:16

Заранее благодарим за то, что вы уделили мне драгоценное время и помогли мне сэтот выпуск.

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Извините, моя проблема была в другом месте.Спасибо за вашу помощь.При получении данных из CSV-файла произошла небольшая ошибка, которая создала проблему.Спасибо всем за потраченное время:)

В функции readfromcsv ранее я делал следующее:

public static void readFromExcel(String path) {

    ArrayList<Attendence> attendences = new ArrayList<Attendence>();
    String csvFile = path;
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";
    Attendence attendenceLine=new Attendence();
    try {
        br = new BufferedReader(new FileReader(csvFile));
        //Attendence attendenceLine = new Attendence();
        line = br.readLine();
        while ((line = br.readLine()) != null) {
            String[] data = line.split(cvsSplitBy);

            if (data.length == 6) {

                attendenceLine.setEmployee_id(data[1]);
                attendenceLine.setDate(data[3]);
                attendenceLine.setInTime(data[4]);
                attendenceLine.setOutTime(data[5]);

            }
            else{
                attendenceLine.setEmployee_id(data[1]);
                attendenceLine.setDate(data[3]);
                attendenceLine.setInTime("no punch");
                attendenceLine.setOutTime("no punch");
            }
            attendences.add(attendenceLine);
        }
        for(Attendence attendence: attendences){
            HibernateOperation.hibernateInsertOneAttendenceSession(attendence);
        }
        //HibernateOperation.hibernateInsertAttendenceSession(attendences);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(AddToDatabaseOperation.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(AddToDatabaseOperation.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Здесь строковая переменнаяtendenceLine имела только последнюю строку в качестве контрольного значения.Вот почему для каждой итерации мне нужно снова создать объект.Я сделал следующее, чтобы решить проблему.

public static void readFromExcel(String path) {

    ArrayList<Attendence> attendences = new ArrayList<Attendence>();
    String csvFile = path;
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";

    try {
        br = new BufferedReader(new FileReader(csvFile));
        //Attendence attendenceLine = new Attendence();
        line = br.readLine();
        while ((line = br.readLine()) != null) {
            String[] data = line.split(cvsSplitBy);
            Attendence attendenceLine=new Attendence();
            if (data.length == 6) {

                attendenceLine.setEmployee_id(data[1]);
                attendenceLine.setDate(data[3]);
                attendenceLine.setInTime(data[4]);
                attendenceLine.setOutTime(data[5]);

            }
            else{
                attendenceLine.setEmployee_id(data[1]);
                attendenceLine.setDate(data[3]);
                attendenceLine.setInTime("no punch");
                attendenceLine.setOutTime("no punch");
            }
            attendences.add(attendenceLine);
        }
        for(Attendence attendence: attendences){
            HibernateOperation.hibernateInsertOneAttendenceSession(attendence);
        }
        //HibernateOperation.hibernateInsertAttendenceSession(attendences);
    } catch (FileNotFoundException ex) {
        Logger.getLogger(AddToDatabaseOperation.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(AddToDatabaseOperation.class.getName()).log(Level.SEVERE, null, ex);
    }
}
0 голосов
/ 23 мая 2018

Пожалуйста, вызовите новый класс и добавьте все поданные в этот новый класс и сохраните новый класс.Это будет работать.

 for (Attendence obj : collection) {
        Attendence newRef = new Attendence();
        newRef.setSerialNo(obj.getSerialNo())
        // set newRef to obj of all column......
        session.save(newRef);
        System.out.println("Object Added");

    }
0 голосов
/ 23 мая 2018

Вы сохраняете ссылку на объект Attendence, в то время как вы изменяете его содержимое каждый раз.

Вам, вероятно, следует создавать экземпляр объекта Attendence каждый раз, когда вы пытаетесь сохранить его.

for (Attendence obj : collection) {
    Attendence newRef = new Attendence(obj);
    session.save(newRef);
    System.out.println("Object Added");

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...