Fiz um web service de teste e estou testando com SoapUI
Eu quero salvar uma pessoa
Seus atributos são nome, idade, empresa
Modo 1:
Envio este Json e acontece o seguinte:
{"nome":"michel adriano medeiros","idade":55,"empresa":{"id_empresa":1,"nome":"nenhuma"}}
Error:
Informações: [EL Warning]: 2015-12-19 15:28:56.903--UnitOfWork[telefone removido])--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: org.postgresql.util.PSQLException: ERROR: null value in column "empresa" violates not-null constraint Detalhe: Failing row contains (2, michel adriano medeiros, 55, null). Error Code: 0 Call: INSERT INTO PESSOA (IDADE, NOME) VALUES (?, ?) bind => [2 parameters bound] Query: InsertObjectQuery(br.com.alga.modelo.Pessoa@6048f73b) Advertência: StandardWrapperValve[Jersey REST Service]: Servlet.service() for servlet Jersey REST Service threw exception org.postgresql.util.PSQLException: ERROR: null value in column "empresa" violates not-null constraint Detalhe: Failing row contains (2, michel adriano medeiros, 55, null).
Modo 2:
Envio este Json e acontece o seguinte:
{"nome":"michel adriano medeiros","idade":55,"empresa":1}
Erro:
Informações: conteudo {"nome":"michel adriano medeiros","idade":55,"empresa":1} Advertência: StandardWrapperValve[Jersey REST Service]: Servlet.service() for servlet Jersey REST Service threw exception java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 57 path $.empresa
Code:
@Path("pessoas")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class PessoaRecurso implements Serializable {
@Path("inserirPessoa")
@POST
public Response adiciona(String conteudo) {
System.out.println("conteudo " + conteudo);
Pessoa pessoas = new Gson().fromJson(conteudo, Pessoa.class);
System.out.println("pessoas nome " + pessoas.getNome());
System.out.println("pessoas idade " + pessoas.getIdade());
System.out.println("pessoas id empresa " + pessoas.getEmpresa());
System.out.println("----------------------------------------------------");
Pessoa pessoa = new PessoasDAO().salvarPessoa(pessoas);
return Response.ok(pessoa)
.status(200)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Headers",
"origin, content-type, accept, authorization")
.header("Access-Control-Allow-Credentials", "true")
.header("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE, OPTIONS, HEAD")
.header("Access-Control-Max-Age", "1209600")
.build();
}
}
public Pessoa salvarPessoa(Pessoa pessoas) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("exemploPU");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(pessoas);
em.getTransaction().commit();
System.out.println("salvo");
return pessoas;
}
@XmlRootElement
@Entity
public class Pessoa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id_pessoa;
private String nome;
private int idade;
@PrimaryKeyJoinColumn(name = "empresa", referencedColumnName = "id_empresa")
@ManyToOne(optional = false)
private Empresa empresa;
// @JoinColumn(name = "empresa", referencedColumnName = "id_empresa")
// @ManyToOne(optional = false, fetch = FetchType.EAGER)
// private Empresa empresas;
@JoinTable(name = "pessoa_filho",
joinColumns = {
@JoinColumn(name = "pessoa", referencedColumnName = "id_pessoa")},
inverseJoinColumns = {
@JoinColumn(name = "filho", referencedColumnName = "id_filho")})
@ManyToMany
private List<Filho> filhosLista;
@XmlRootElement
@Entity
public class Empresa implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id_empresa;
private String nome;