3
respostas

Preenchimento de produtos_categoria

O código do aplicativo está definido para "recriar" as tabelas quando o servidor é inicializado, pelo comando do JPAConfigurator:

"props.setProperty("hibernate.hbm2ddl.auto", "create-drop");

Porém, embora os relacionamentos estejam (aparentemente) corretamente definidos, o conteúdo da tabela "produto_categoria" não é automaticamente preenchido quando da criação dos produtos.

Como resultado, a busca por categorias ou lojas acaba não funcionando. Será que passei batido em algo?!

3 respostas

Poderia postar as entidades aqui, para facilitar a compreensão do problema, e o seu código que cria os produtos?

Ok, segue o código da classe "CriadorDeProdutos.java", que está junto ao projeto:

package br.com.caelum;

import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;

import br.com.caelum.model.Categoria;
import br.com.caelum.model.Loja;
import br.com.caelum.model.Produto;

@Component
public class CriadorDeProdutos {

    @PersistenceContext
    private EntityManager em;

    @Autowired
    private JpaTransactionManager transactionManager;

    @PostConstruct
    public void init() {
        TransactionTemplate template = new TransactionTemplate(transactionManager);
        template.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {

                // Criando lojas
                Loja casaDoCodigo = new Loja();
                casaDoCodigo.setNome("Casa do Código");

                em.persist(casaDoCodigo);

                Loja musicalAlegre = new Loja();
                musicalAlegre.setNome("Musical Alegre");

                em.persist(musicalAlegre);

                // Criando categorias
                Categoria tecnologia = new Categoria("Tecnologia");
                em.persist(tecnologia);

                Categoria musica = new Categoria("Música");
                em.persist(musica);


                // Criando produtos
                Produto cursoDeViolao = new Produto();
                cursoDeViolao.setNome("Curso de Violão");
                cursoDeViolao.setLoja(musicalAlegre);
                cursoDeViolao.setPreco(49.0);
                cursoDeViolao.setDescricao("Estude com os melhores professores e aprenda no seu ritmo, sem sair de casa.");
//                cursoDeViolao.adicionarCategorias(tecnologia, musica);
                cursoDeViolao.setLinkDaFoto("https://pbs.twimg.com/profile_images/378800000825434860/12136ee913ed4f44860914d44650144e.png");

                em.persist(cursoDeViolao);

                Produto livroDeArquitetura = new Produto();
                livroDeArquitetura.setNome("Introduçao a Arquitetura Java e Design de projetos com Java");
                livroDeArquitetura.setLoja(casaDoCodigo);
                livroDeArquitetura.setPreco(30.0);
//                livroDeArquitetura.adicionarCategorias(tecnologia);
                livroDeArquitetura.setDescricao("Neste livro, os autores, conhecidos especialistas da "
                                               + " área, apresentam muitos tópicos que aparecem com frequência"
                                               + " na plataforma Java, incluindo desde modelagem e design das "
                                               + "classes, até detalhes importantes das tecnologias mais utilizadas."
                                               + "  Sempre com uma visão técnica e prática capaz de elucidar muitas "
                                               + "questões enfrentadas tanto pelo profissional iniciante quanto por "
                                               + "aquele que está adquirindo mais experiência na plataforma.");

                livroDeArquitetura.setLinkDaFoto("http://www.arquiteturajava.com.br/img/capa-livro.png");

                em.persist(livroDeArquitetura);

                Produto livroDeSpring = new Produto();
                livroDeSpring.setNome("Vire o jogo com Spring Framework");
                livroDeSpring.setLoja(casaDoCodigo);
                livroDeSpring.setPreco(30.0);
//                livroDeSpring.adicionarCategorias(tecnologia);
                livroDeSpring.setDescricao("Criado para simplificar o desenvolvimento de aplicações Java, "
                        + "o Spring se tornou um dos frameworks de mais destaque dentro desse grande ambiente.  "
                        + "Aprenda muito mais que o básico do Spring, desde o tradicional Container de Inversão "
                        + "de Controle e Injeção de Dependências, passando pelos robustos módulos de segurança, "
                        + "transações, programação orientada a aspectos e também o fantástico módulo MVC, o SpringMVC.");

                livroDeSpring.setLinkDaFoto("http://cdn.shopify.com/s/files/1/0155/7645/products/spring-framework-featured_large.png?v=1411567960");

                em.persist(livroDeSpring);

                Produto violao = new Produto();
                violao.setNome("Violão");
                violao.setLoja(musicalAlegre);
                violao.setDescricao("Excelente violão");
                violao.setPreco(500.0);
//                violao.adicionarCategorias(musica);
                violao.setLinkDaFoto("http://www.marillac.g12.br/imgs/atividade%20complementar/violao.jpg");

                em.persist(violao);

                Produto flauta = new Produto();
                flauta.setNome("Flauta Doce");
                flauta.setLoja(musicalAlegre);
                flauta.setDescricao("Flauta doce");
                flauta.setPreco(300.0);
//                flauta.adicionarCategorias(musica);
                flauta.setLinkDaFoto("http://i.mlcdn.com.br/1500x1500/flauta-doce-germanicayamaha-yrs-23g-204013000.jpg");

                em.persist(flauta);

                // Criando relação produtos/categoria


            }
        });        
    }

}

Porque as linhas estão comentadas?

flauta.adicionarCategorias(musica); violao.adicionarCategorias(musica); livroDeSpring.adicionarCategorias(tecnologia); livroDeArquitetura.adicionarCategorias(tecnologia); cursoDeViolao.adicionarCategorias(tecnologia, musica);

Pelo que vejo no código seriam essas linhas que criariam a ligação entre produto e categoria.