Проблема множественного двунаправленного отображения в JPA (Hibernate) - PullRequest
0 голосов
/ 04 июля 2019

У меня были проблемы с вычислением отображения JPA OneToMany / ManyToOne, мне сначала сказали, что это связано с CascateType.ALL, нуждающимся в родительской сущности, я добавил это, и я все еще получал "отключенный ошибка "Сущность", я изменил типы выборки и теперь получаю

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing :

Ошибка, я совершенно заблудился, что делать.

У меня есть основной объект (резерв), который содержит отношение OneToOne и два отношения OneToMany.

Отношения OneToMany имеют аннотации:

@OneToOne(mappedBy = "reserve", fetch = FetchType.EAGER, cascade = CascadeType.ALL)

Дети (например, один из них) также имеют две связи ManyTwoOne с аннотациями:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idReserve", referencedColumnName = "idReserve")

Вот процесс создания (реальные имена / атрибуты сущностей на испанском языке, я просто перевел его выше для более легкого понимания):

Pago pago = new Pago();
        pago.setTipo("Efectivo");
        pago.setTotal(1500);

        Alojamiento alojamiento = new Alojamiento();
        alojamiento.setNombre("Hotel las Flores");
        alojamiento.setNumeroDeHabitaciones(30);
        alojamiento.setTipo("Hotel Turistico");
        alojamiento.setValoracion(5);
        alojamiento.setUbigeo(11);
        alojamiento.setCodAlojamiento("ALO01");

        Habitacion habitacion = new Habitacion();
        habitacion.setDescripcion("Habitación Ejecutiva");
        habitacion.setTipo(3);
        habitacion.setNumero("5");
        habitacion.setPrecio("1500 dolares");
        habitacion.setCodHabitacion("HAB01");

        List<Habitacion> listHab = new ArrayList<>();
        listHab.add(habitacion);
        alojamiento.setHabitaciones(listHab);

        Usuario usuario = new Usuario();
        usuario.setNombres("Jeremy");
        usuario.setApellidos("Tornero");
        usuario.setContrasena("1234");
        usuario.setEmail("jeremy@gmail.com");
        usuario.setFoto("");
        usuario.setCodUsuario("USU01");

        Reserva reserva = new Reserva();
        reserva.setCantidadDePersonas(3);
        reserva.setFechaIngreso(LocalDate.of(19,7,15));
        reserva.setFechaSalida(LocalDate.of(19,10,30));
        reserva.setComentarios("");
        List<Habitacion> listHab2 = new ArrayList<>();
        listHab2.add(habitacion);
        reserva.setHabitaciones(listHab2);
        reserva.setUsuario(usuario);
        List<Pago> listPago = new ArrayList<>();
        listPago.add(pago);
        reserva.setPagos(listPago);

        pago.setReserva(reserva);
        habitacion.setAlojamiento(alojamiento);
        habitacion.setReserva(reserva);
        usuario.setReserva(reserva);

        pagoRepository.save(pago);
        log.info("success saving pago");
        habitacionRepository.save(habitacion);
        log.info("success saving habitacion");
        alojamientoRepository.save(alojamiento);
        log.info("success saving alojamiento");
        usuarioRepository.save(usuario);
        log.info("success saving usuario");
        reservaRepository.save(reserva);
        log.info("success saving reserva");

Кажется, я получаю ошибки при отладке, когда пришло время вызвать метод save () из хранилища (в конце). Я не совсем уверен, вызвано ли это сопоставлением сущностей, как я сопоставляю, выбираю, каскадно или это связано с тем, как я их создаю в приложении.

1 Ответ

0 голосов
/ 04 июля 2019

Итак, я исправил это через несколько часов, очевидно, проблема была в том порядке, в котором я их добавил, сначала нужно создать экземпляры классов с OneToMany и ничего не назначать, вместо этого вы просто сохраняете их напрямую, а затем, когдаСоздаются классы ManyToOne, вы присваиваете им уже сохраненный класс OneToMany, а затем .save с классом репозитория, чтобы их идентификаторы были правильно назначены для json / database

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