Socorro preciso entregar um projeto hoje!

4 respostas
Rafield

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 atributo
package 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;
	}
	
	
	
}
Classe: Atributo O produto recebe os atributos aqui que estou tendo problema pois não consigo criar os relacionamentos id atributo com produto
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;
	}
	
	
}
Classe: ProdutoPesquisaId Essa classe faz as pesquisas do produto junto com atributo
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]

4 Respostas

Rafael_Guerreiro

Aqui:

@OneToMany(fetch=FetchType.EAGER) // Define que é EAGER (ou seja, carrega no ato) 
    @JoinColumn(name="produto_id_atr")
    @Cascade(CascadeType.SAVE_UPDATE)
    private List<Atributo> atributos;

OU
Aqui:

Query query = session.createQuery("select distinct u from produto u left join fetch u.atributos where idProduto = :id");
query.setParameter("id", id);  
List<Produto> produtos = query.list();

for (Produto p : produtos)
    Hibernate.initialize(p.getAtributos());

List<Atributo> atributos = null;
Rafield

Obrigado vou testar aqui

Hebert_Coelho

Aqui explica o erro e como resolver: http://uaihebert.com/quatro-solucoes-para-lazyinitializationexception/

Rafield

agora esta aparecendo um outro erro
[color=red]produto is not mapped [select distinct u from produto u left join fetch u.atributos where idProduto = :id]
[/color]

Gostaria de saber tambem como cadastrar o id do produto nos atributos olha como estou fazendo

Classe: AtributoCadastrar
Gostaria de saber como é recebido a chave estrangeira por aqui
olhe abaixo em

String produto_id_atr = request.getParameter("produto_id_atr");
é assim que recebo os parametros do jsp

queria saber como cadastrar esta informação eu usei

atributo.setProduto(produto_id_atr);
não sei se esta correto aqui esta dando um erro

package br.com.aplicativo.controller;


import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.aplicativo.model.HibernateUtil;
import br.com.aplicativo.model.Atributo;
import br.com.aplicativo.model.Produto;

public class AtributoCadastrar implements Logica {
	@Override
	public String executa(HttpServletRequest request, HttpServletResponse response){
		try{
			
			String tituloAtributo = request.getParameter("tituloAtributo");
			String textoAtributo = request.getParameter("textoAtributo");
			String produto_id_atr = request.getParameter("produto_id_atr");

			Atributo atributo = new Atributo();
			atributo.setTituloAtributo(tituloAtributo);
			atributo.setTextoAtributo(textoAtributo);
			atributo.setProduto(produto_id_atr);
			
			Session session = HibernateUtil.getSession();
			Transaction tran = session.beginTransaction();
			session.persist(atributo);
			tran.commit();
			
			request.setAttribute("msg", "Cadastrado com sucesso");
			return "/WEB-INF/view/sucessoAdmin.jsp";
			
		}catch(Exception e){
			request.setAttribute("msg", "Erro ao cadastrar");
			return "/WEB-INF/view/erroAdmin.jsp";
		}
		
	}
	
}
Este é meu jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!--  inclui header com menu -->
<%@ include file="../../site/header.html" %>
<body id="painel-de-controle">
	<div class="painel-de-controle">
	  	<%@ include file="../../site/menu_painel_admin.html" %>
		
		<div class="conteudo-painel-de-controle">
	        <form method="post" action="Controla?acao=AtributoCadastrar" class="form-cadastro" role="form">
	            <h2 class="form-signin-heading">Cadastrar</h2>
	            
	            <!--[if IE]> <label for="idProduto">Produto</label><![endif]-->
	            <input type="text" name="idProduto" class="form-control" placeholder="Produto" required autofocus>
	            
	            <!--[if IE]> <label for="tituloAtributo">titulo Atributo</label><![endif]-->
	            <input type="text" name="tituloAtributo" class="form-control" placeholder="titulo Atributo" required autofocus>
	            <!--[if IE]> <label for="textoAtributo">texto Atributo</label><![endif]-->
	            <input type="text" name="textoAtributo" class="form-control" placeholder="texto Atributo" required autofocus>
	            <input type="submit" name="botao" value="Cadastrar" class="btn btn-lg btn-primary btn-block" />
	       	</form>             
         </div>
	</div>                    
</body>
</html>

Cara to desesperado tenho que entregar esse trabalho hoje anoite só falta isso

Criado 5 de novembro de 2014
Ultima resposta 5 de nov. de 2014
Respostas 4
Participantes 3