Проблема CRUD с чтением JSON с использованием метода POST в REST API на Java с использованием Джерси из множества, отмеченных в hibernate

#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 . СЛИЯНИЕ при указании объединяемой таблицы. Большое спасибо!