Tenho um projeto de um site usando java com hibernate, estou com dificuldades para criar os relacionamentos olhem o codigo abaixo
Classe: Produto Esse é o produto que vai ser cadastrado ele deve receber o id da tabela atributopackage br.com.aplicativo.model;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.OneToMany;
import javax.persistence.ManyToMany;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
public class Produto {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long idProduto;
private String nomeProduto;
private double preco;
private String foto;
@Lob
@Column(name="descricaoProduto", length=10000)
private String descricaoProduto;
@OneToMany // Tipo de relacionamento
@JoinColumn(name="produto_id_atr") // nome da coluna (chave estrang.)
@Cascade(CascadeType.SAVE_UPDATE) // Todos os atributos atualizados conforme essa tabela criando uma lista de atributos
private List<Atributo> atributos; // Criando uma lista de atributos
@OneToMany
@JoinColumn(name="produto_id_ite")
@Cascade(CascadeType.SAVE_UPDATE)
private List<Item> item;
public List<Item> getItem() {
return item;
}
public void setItem(List<Item> item) {
this.item = item;
}
public List<Atributo> getAtributos() {
return atributos;
}
public void setAtributos(List<Atributo> atributos) {
this.atributos = atributos;
}
public long getIdProduto() {
return idProduto;
}
public void setIdProduto(long idProduto) {
this.idProduto = idProduto;
}
public String getNomeProduto() {
return nomeProduto;
}
public void setNomeProduto(String nomeProduto) {
this.nomeProduto = nomeProduto;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public String getDescricaoProduto() {
return descricaoProduto;
}
public void setDescricaoProduto(String descricaoProduto) {
this.descricaoProduto = descricaoProduto;
}
}
package br.com.aplicativo.model;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
public class Atributo {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long idAtributo;
private String tituloAtributo;
private String textoAtributo;
@OneToMany
@JoinColumn(name="produto_id_pro")
@Cascade(CascadeType.SAVE_UPDATE)
private List<Produto> produto;
public List<Produto> getProduto() {
return produto;
}
public void setProduto(List<Produto> produto) {
this.produto = produto;
}
public long getIdAtributo() {
return idAtributo;
}
public void setIdAtributo(long idAtributo) {
this.idAtributo = idAtributo;
}
public String getTituloAtributo() {
return tituloAtributo;
}
public void setTituloAtributo(String tituloAtributo) {
this.tituloAtributo = tituloAtributo;
}
public String getTextoAtributo() {
return textoAtributo;
}
public void setTextoAtributo(String textoAtributo) {
this.textoAtributo = textoAtributo;
}
}
package br.com.aplicativo.controller;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.aplicativo.model.Atributo;
import br.com.aplicativo.model.HibernateUtil;
import br.com.aplicativo.model.Produto;
public class ProdutoPesquisaId implements Logica {
@Override
public String executa(HttpServletRequest request,
HttpServletResponse response) throws Exception {
try{
Session session = HibernateUtil.getSession();
Transaction tran = session.beginTransaction();
long id = Long.parseLong(request.getParameter("idproduto"));
Query query = session.createQuery("select distinct u from produto u left join fetch u.atributos where idProduto = :id");
//Produto produto = new Produto();
query.setParameter("id", id);
List<Produto> produtos = query.list();
List<Atributo> atributos = null;
tran.commit();
request.setAttribute("lista",produtos);
return "/WEB-INF/view/resultprodutoid.jsp";
}catch(Exception e){
e.printStackTrace();
request.setAttribute("msg","Erro ao Cadastrar o produto");
return "/WEB-INF/view/erro.jsp";
}
}
}
Sempre que faz a pesquisa da este erro:
[color=red]failed to lazily initialize a collection of role: br.com.aplicativo.model.Produto.atributos, no session or session was closed[/color]
O objetivo do meu trabalho é exibir no resultprodutoid.jsp as informações do produto junto com atributos so que eu ainda estou confuso em como fazer as relações
essas são minhas classes
[img]https://lh5.googleusercontent.com/-NotJ5r9FtLU/VFo8a139gxI/AAAAAAAAAFA/5KMoaxEHmc8/w702-h440-no/relas%C3%A3o.jpg[/img]