Buenas,tenho uma classe venda e a mesma recebe vários produtos(manyToOne) e cliente (oneToMany) e gostaria de juntar tudo em um join para fazer um relatório com apenas as informações desejadas ,tentei me aventurar implementar mas deu Erro 500 no web service ,eu andei dando uma pesquisada e acredito que seja por causa que não adicionei @joinColumn mas mesmo assim não sei qual a serventia do mesmo
Entidade venda :
package entidade;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author 631520084
*/
@Entity
@XmlRootElement
public class Venda implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String dtCompra;
@OneToMany
private List<Produto>produtos;
@ManyToOne
private Cliente cliente ;
public Venda() {
}
public Venda(String dtCompra, List<Produto> produtos, Cliente cliente) {
this.dtCompra = dtCompra;
this.produtos = produtos;
this.cliente = cliente;
}
public String getDtCompra() {
return dtCompra;
}
public void setDtCompra(String dtCompra) {
this.dtCompra = dtCompra;
}
public List<Produto> getProdutos() {
return produtos;
}
public void setProdutos(List<Produto> produtos) {
this.produtos = produtos;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Venda)) {
return false;
}
Venda other = (Venda) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "entidade.Venda[ id=" + id + " ]";
}
}
Dao da venda e o join que usei que não funfou
*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package rn;
import entidade.Fornecedor;
import entidade.Produto;
import entidade.Venda;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import util.Conexao;
/**
*
* @author 631520084
*/
public class VendaRN {
public Venda inserir(Venda venda) {
Conexao con = new Conexao();
EntityManager em = con.getEntidade();
em.getTransaction().begin();
for (Produto produto : venda.getProdutos()) {
em.merge(produto);
}
em.merge(venda.getCliente());
em.persist(venda);
em.getTransaction().commit();
em.close();
return venda;
}
public List<Venda> relatorio() {
Conexao con = new Conexao();
EntityManager em = con.getEntidade();
String jpql = "SELECT p.nome,c.nome, p.preco, v.dtCompra FROM Venda v JOIN v.cliente c JOIN v.produtos p";
Query query = em.createQuery(jpql);
List<Venda> listaVendas = query.getResultList();
em.close();
return (listaVendas);
}
}
Erro
HTTP Status 500 – Internal Server Error Type Status Report
Message Internal Server Error
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Apache Tomcat/8.5.30
OBS: o método inserir funciona por isso não é problema no webservice,o join esta compilando . Desde já grato,boa noite!