Spring-Boot JPA «многие ко многим» не заполняет таблицу ManyToMany - PullRequest
0 голосов
/ 22 сентября 2018

Привет, ребята, у меня есть следующий код:

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
public class Doctor {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String firstName;
    private String lastName;
    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            })
    @JoinTable(name = "doctor_patient",
            joinColumns = {@JoinColumn(name="doctor_id")},
            inverseJoinColumns ={@JoinColumn(name="patient_id")})
    private Set<Patient> patients = new HashSet<>();


    //getters and setters
}

, а также этот объект:

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
public class Patient {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String firstName;
    private String lastName;
    @ManyToMany(fetch = FetchType.LAZY,
            cascade = {
                    CascadeType.PERSIST,
                    CascadeType.MERGE
            },
    mappedBy = "patients")
    private Set<Doctor> doctorList = new HashSet<>();

    //Getters and setters

}

Это тест, который я делаю, чтобы использовать фрагменты:

@Test
@Transactional
public void testSaveDoctor(){

    Doctor firstDoctor = new Doctor();
    firstDoctor.setFirstName("test doc");
    firstDoctor.setLastName("lname doc");

    Patient firstPatient = new Patient();
    firstPatient.setFirstName("patient 1");
    firstPatient.setLastName("patient lname1");

    firstDoctor.getPatients().add(firstPatient);
    firstPatient.getDoctorList().add(firstDoctor);

    rDoctor.save(firstDoctor);
}

Я использую стандартные CRUD-репозитории, и в результате у меня есть записи в таблицах пациента и доктора, но таблица doctor_patient пуста и никогда не вставляется с правильными данными.Как это исправить?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Удалить @Transactional это откат этой транзакции .. если ниже, вы должны быть хорошими.

@Test
public void testSaveDoctor(){

    Doctor firstDoctor = new Doctor();
    firstDoctor.setFirstName("test doc");
    firstDoctor.setLastName("lname doc");

    Patient firstPatient = new Patient();
    firstPatient.setFirstName("patient 1");
    firstPatient.setLastName("patient lname1");

    firstDoctor.getPatients().add(firstPatient);
    firstPatient.getDoctorList().add(firstDoctor);

    rDoctor.save(firstDoctor);
}
0 голосов
/ 22 сентября 2018

Из-за того, что я добавил @Transactional в описание теста, Hibernate откатывал результат. Теперь, после его удаления, он работает как шарм.

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