早上好,我正在尝试从 Spring Boot 接收带有 ajax 调用的 JSON,其中包含一系列包含子表和父亲的字段。
我已经遇到了无限递归等问题,并用@JsonManagedReference 和@JsonBackReference 修复了它。现在发生了什么?我至少需要获取父表中的数据以获取一个值,但是这个值,当我们在 Ajax 中得到答案时,它不会出现。
我怎样才能在不陷入无限递归的情况下获取该数据?
这些将是表格,我删除了字段,使其不会很长。
@Entity
@Table(name="actividad_servicio")
public class Actividad_Servicio implements Serializable {
@JsonBackReference
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_actividad_servicio_tipo_actividad_servicio_id"), name="tipo_actividad_servicio_id", nullable = false, columnDefinition = "int")
private Tipo_Actividad_Servicio tipo_actividad_servicio;
@JsonBackReference
@ManyToOne
@JoinColumn(foreignKey = @ForeignKey(name = "fk_actividad_servicio_empleado_id"), name="empleado_id",columnDefinition = "int")
private Empleado empleado;
@JsonManagedReference
@OneToMany(mappedBy = "actividad_servicio", cascade=CascadeType.ALL, orphanRemoval = true)
private Set<Actividad_Servicio_Alumno> actividad_servicio_alumno = new HashSet<Actividad_Servicio_Alumno>();
@JsonManagedReference
@OneToOne(mappedBy = "actividad_servicio", cascade=CascadeType.ALL, orphanRemoval = true)
private Horario_Actividad_Servicio horario_actividad_servicio = new Horario_Actividad_Servicio();
@JsonManagedReference
@OneToMany(mappedBy = "actividad_servicio", cascade=CascadeType.ALL, orphanRemoval = true)
private Set<Factura> factura = new HashSet<Factura>();
}
@Entity
@Table(name="horario_actividad_servicio")
public class Horario_Actividad_Servicio implements Serializable {
@JsonBackReference
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(foreignKey = @ForeignKey(name = "fk_horario_actividad_servicio_actividad_servicio_id"), name="actividad_servicio_id", referencedColumnName = "id", columnDefinition = "int")
private Actividad_Servicio actividad_servicio;
}
@Entity
@Table(name="tipo_actividad_servicio")
public class Tipo_Actividad_Servicio implements Serializable {
@JsonManagedReference
@OneToMany(mappedBy = "tipo_actividad_servicio", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Actividad_Servicio> actividad_servicio = new HashSet<Actividad_Servicio>();
}
在将响应返回给 Ajax 之前,我查看了 service_activity 对象的内容,它显示了 service_activity_type 及其属性。
@RestController
@RequestMapping("/actividades/rest")
public class ActividadRestController {
@Autowired
private Actividad_ServicioService actividad_servicioService;
@GetMapping
public Response findOne(@RequestParam int id, Model model) {
Response response = new Response();
try {
Actividad_Servicio actividad_servicio = actividad_servicioService.findById(id);
response = new Response("Done", actividad_servicio);
} catch (Exception e) {
response = new Response("Error", Constants.Error);
e.printStackTrace();
}
return response;
}
}
但是当它回到 Ajax 时,我检查了我得到的内容是这样的:
Success: - {…}
- data: {…}
+ actividad_servicio_alumno: Array []
+ factura: Array []
+ horario_actividad_servicio: Object { id: 10, l: null, hora_inicio_l: "", …}
<prototype>: Object { … }
status: "Done"
<prototype>: Object { … }
但是 service_activity_type 并没有出现以获取某个字段的值。我知道这与无限递归的问题相冲突,但我想有一些事情发生在我身上,我留下了一个注释,以便我可以获得那些父值。
非常感谢您的帮助。