#java #json #hibernate #jpa #jersey
#java #json #спящий режим #jpa #джерси
Вопрос:
Итак, моя проблема заключается в следующем: я создал веб-сервис RESTfull на Java с использованием Джерси. Кроме того, для сопоставления и использования базы данных MySQL я использовал hibernate (jpa). У меня есть POJO с именем «horarios». Кроме того, POJO с именем «turmas». Они ссылаются друг на друга с помощью примечания @ManyToMany в Hibernate. Они выглядят так:
Turmas.java
@Entity
public class Turmas {
@Id
@GeneratedValue
@Column(name = "turmas_id", unique = true, nullable = false)
int Id;
@Column
String codigo;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "turmas_horarios", joinColumns = {
@JoinColumn(name = "turmas_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "horarios_id",nullable = false, updatable = false) })
private List<horarios> Horarios;
}
//... getters and setters
Horarios.java
@Entity
public class horarios {
@Id
@GeneratedValue
@Column(name = "horarios_id", nullable = false, unique = true)
int Id;
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "Horarios")
private List<Turmas> turmas;
@Column
private int horario;
@Column
private int dia;
//...getters and setters
}
И вот идет HorariosController:
@Path("/horarios")
public class HorariosController {
@Path("/setHorarios")
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response setHorarios(horarios h) throws Exception
{
horarios h1 = new horarios();
h1.setDia(h.getDia());
h1.setHorario(h.getHorario());
h1.setTurmas(h.getTurmas());
Querys.Persist(h1);
return Response.status(200).build();
}
}
//...GET and DELETE methods
Проблема заключается в следующем: для каждого столбца очень легко обработать объект json. Но я действительно не могу сделать это, используя тип «многие ко многим». вот пример json, который я отправляю:
{"dia": 6,"horario": 15,"turmas": {"codigo":"xxxx"}}
Который действителен в соответствии с http://www.jsonlint.com /. Хотя, когда я пробую метод POST, он возвращает мне:
Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@1b23d8c; line: 3, column: 15] (through reference chain: modules.horarios["turmas"])
И по этой причине я не могу извлечь значение, которое я ввел в поля Turma.
Последний вопрос: как (и что я должен изменить) прочитать файл JSON и поместить в столбец Соединения связь между переданными Turmas и Horarios? Например, как я могу прочитать переданный идентификатор turmas (например) без получения этой ошибки?
Ответ №1:
вы должны изменить свой json, как показано ниже. В соответствии с вашим определением сущности horaio, в вашем horario должен быть список турм. {«dia»: 6, «horario»: 15, «turmas»: [{«codigo»:»xxxx»}]}
Комментарии:
1. Я действительно это сделал, это изменило сообщение об ошибке: ЗАРАНЕЕ!! хахаха, но я на самом деле вроде как справился с проблемой, выполнив то, что вы сказали, а также изменив cascade = CascadeType . СЛИЯНИЕ при указании объединяемой таблицы. Большое спасибо!