我有一个使用Spring Boot构建的Web应用程序,该应用程序与db PostgreSql连接,该项目是关于教育机构的,它管理学生和发票...
我手动生成所有发票。我通常会添加第一个cuota(发票),但是当我想生成第二个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
答案 0 :(得分:0)
如果您没有使用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
的关联的合并操作进行级联。合并另一个实体副本时,合并一个实体副本所导致的实体状态将被覆盖。