Несколько представлений одного и того же объекта объединяются с @OneToMany - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть веб-приложение, созданное с помощью Spring Boot, связанное с базой данных PostgreSql, проект посвящен учебному заведению и управлению студентами и выставлению счетов ...

Я генерирую все счета-фактуры вручную.Я обычно добавляю первый cuota (счет-фактуру), но когда я хочу создать второе, у меня возникает эта проблема:

java.lang.IllegalStateException: Multiple representations of the same entity [com.codeboros.app.entity.Cuota#1] are being merged. Detached: [com.codeboros.app.entity.Cuota@1788e1df]; Managed: [com.codeboros.app.entity.Cuota@2697e3fc]

У меня есть следующие объекты:

@Entity
@Table(name="ALUMNOS")
public class Alumno implements Serializable {           
    @OneToMany(mappedBy="alumno", cascade= {CascadeType.DETACH,CascadeType.PERSIST,CascadeType.DETACH,CascadeType.REMOVE,CascadeType.REFRESH,CascadeType.MERGE}, fetch=FetchType.LAZY)
    @NotFound(action = NotFoundAction.IGNORE)
    @JsonIgnore 
    private List<Cuota> cuotas;
}

@Entity
@DiscriminatorValue(value="Cuota")
public class Cuota extends Factura implements Serializable  {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="alumno_cod")
    @NotFound(action = NotFoundAction.IGNORE) 
    Alumno alumno;
}

ИAlumnoController

@PostMapping("/alumnoGenCuota/{id}")    
public String GenCuota(@PathVariable Long id, Cuota cuota) {
    Alumno alumno = alumnoService.get(id);
    cuota.setAlumno(alumno);
    cuota.setMonto(alumno.getCurso().getCuota()); 
    cuota.setDetalle(alumno.getCurso().getNombre()+":  $"+alumno.getCurso().getCuota()); //detalle
    alumno.AgregarCuota(cuota);             

    alumnoService.save(alumno);

    return "redirect:/alumnocuotas/"+id;
}

Я пытался удалить CascadeType.MERGE, но не сохранял новости. Cuotas

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы не используете Hibernate, удалите CascadeType.MERGE из сущности, которая не позволяет вам сохранить отсоединенную сущность, или поместите все каскадные типы, отличные от CascadeType.MERGE

Если вы используете Hibernate, добавьтеследующие строки в вашем файле persistence.xml -

<property name="hibernate.event.merge.entity_copy_observer" value="allow"/>

Когда вы установите hibernate.event.merge.entity_copy_observer=allow, Hibernate будет объединять каждую копию объекта, обнаруженную при каскадной операции объединения.В процессе слияния каждой копии объекта Hibernate будет каскадно выполнять операцию слияния из каждой копии объекта в свои ассоциации с cascade=CascadeType.MERGE или CascadeType.ALL.Состояние объекта, полученное в результате объединения копии объекта, будет перезаписано при объединении другой копии объекта.

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