JPA / Hibernate / Spring - исключение первичного ключа - PullRequest
0 голосов
/ 09 мая 2018

Eclipse выдает мне исключение - дубликат записи '201805091-1' для ключа 'PRIMARY'. Я понимаю это исключение, но не понимаю, почему приведенный ниже код создает новую запись в моей базе данных. Я думал, что это должно работать следующим образом: если комбинация даты и идентификатора доктора не существует - тогда сделайте так, чтобы в противном случае использовалась комбинация, которая в настоящее время находится в базе данных. Но должно быть, очевидно, что-то не так ...

Большое спасибо:)

OperationsDate od = null; // these 6 lines of the code may be problematic

        if(em.find(OperationsDate.class, id) != null) {
            od = em.find(OperationsDate.class, id);
        } else {
            od = new OperationsDate(id);
        }

public void process(List<Integer> list, int doctorId, String pin, boolean inf) {
        Patient p = em.find(Patient.class, pin);
        Doctor d = em.find(Doctor.class, doctorId);

        p.addDoctor(d);
        d.addPatient(p);

        int id = countId(doctorId);

        OperationsDate od = null;

        if(em.find(OperationsDate.class, id) != null) {
            od = em.find(OperationsDate.class, id);
        } else {
            od = new OperationsDate(id);
        }

        if(inf) {
            for(int number : list) {
                Medicine m = em.find(Medicine.class, number);

                od.setDoctor(d);
                d.addOperationsDate(od);
                od.addMedicine(m);
                m.addOperationsDate(od);
            }
        } else {
            Operation o = em.find(Operation.class, list.get(0));

            od.setDoctor(d);
            d.addOperationsDate(od);
            od.addOperation(o);
            o.addOperationsDate(od);
        }

    }

public int countId(int doctorId) {
        long millis=System.currentTimeMillis();  
        java.sql.Date date=new java.sql.Date(millis);  

        String id = "";
        String date2 = date.toString();
        for(int i=0; i < date2.length();i++) {
            if(i == 4 || i == 7) {
                continue;
            }
            id += date2.charAt(i);
        }
        id += doctorId;
        int id2 = Integer.parseInt(id);

        return id2;
    }

1 Ответ

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

Просто попробуйте так, как я уже говорил в своем комментарии:

    OperationsDate od = em.find(OperationsDate.class, id);
    if( od == null) {
        od = new OperationsDate(id);
    }
    ...
    // potential persist or merge, depending on your frameworks configuration regarding autocommit and such
    em.persist(od);

Если это все еще не работает, добавьте код для ваших сущностей, чтобы убедиться, что в этом нет ничего плохого.

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