Bom dia pessoal!
Eu normalizei as tabelas do sistema, porém ao fazer isso tudo parou de funcionar... Minha estrutura está dessa forma:
Classe Produto:
package br.com.minhaEmpresa.modelo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
@Table(name = "TAB_PROD_DT")
public class Produto {
// ATRIBUTOS "COMUNS" PARA TODOS OS PRODUTOS:
@Id
@Column(length = 10)
@GeneratedValue(strategy = GenerationType.IDENTITY) // MYSQL
private Integer id;
@NotEmpty
@Column(name = "codigo_produto", length = 24)
private String codigoProduto;
@Column(columnDefinition = "Character(1)")
private Character catalogo;
@Column(name = "descricao_tipo_produto", length = 30)
private String descricaoTipoProduto;
@Column(length = 19)
private Integer ean;
@Column(length = 30)
private String imagem;
@Column(name = "imagem_embalagem", length = 40)
private String imagemEmbalagem;
@Column(columnDefinition = "Character(1)")
private Character lancamento;
@Column(columnDefinition = "Character(1)")
private Character liberado;
@Column(name = "local_imagem", length = 200)
private String localImagem;
@Column(length = 30)
private String marca;
@Column(length = 19)
private Integer ncm;
@Column(columnDefinition = "Character(1)")
private Character original;
@Column
private Double peso;
@Column
private Double preco;
@Column(columnDefinition = "Character(1)")
private Character promocao;
@Column(name = "queima_estoque", columnDefinition = "Character(1)")
private Character queimaEstoque;
@Column(length = 60)
private String semelhantes;
@Column(name = "tipo_produto")
private Integer tipoProduto;
/******************************************************************************/
// MAPEAMENTO
@OneToOne
private ProdutoEco produtoEco;
@OneToOne
private ProdutoVaz produtoVaz;
@OneToOne
private ProdutoVazCap produtoVazCap;
/******************************************************************************/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCodigoProduto() {
return codigoProduto;
}
public void setCodigoProduto(String codigoProduto) {
this.codigoProduto = codigoProduto;
}
public Character getCatalogo() {
return catalogo;
}
public void setCatalogo(Character catalogo) {
this.catalogo = catalogo;
}
public String getDescricaoTipoProduto() {
return descricaoTipoProduto;
}
public void setDescricaoTipoProduto(String descricaoTipoProduto) {
this.descricaoTipoProduto = descricaoTipoProduto;
}
public Integer getEan() {
return ean;
}
public void setEan(Integer ean) {
this.ean = ean;
}
public String getImagem() {
return imagem;
}
public void setImagem(String imagem) {
this.imagem = imagem;
}
public String getImagemEmbalagem() {
return imagemEmbalagem;
}
public void setImagemEmbalagem(String imagemEmbalagem) {
this.imagemEmbalagem = imagemEmbalagem;
}
public Character getLancamento() {
return lancamento;
}
public void setLancamento(Character lancamento) {
this.lancamento = lancamento;
}
public Character getLiberado() {
return liberado;
}
public void setLiberado(Character liberado) {
this.liberado = liberado;
}
public String getLocalImagem() {
return localImagem;
}
public void setLocalImagem(String localImagem) {
this.localImagem = localImagem;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public Integer getNcm() {
return ncm;
}
public void setNcm(Integer ncm) {
this.ncm = ncm;
}
public Character getOriginal() {
return original;
}
public void setOriginal(Character original) {
this.original = original;
}
public Double getPeso() {
return peso;
}
public void setPeso(Double peso) {
this.peso = peso;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
public Character getPromocao() {
return promocao;
}
public void setPromocao(Character promocao) {
this.promocao = promocao;
}
public Character getQueimaEstoque() {
return queimaEstoque;
}
public void setQueimaEstoque(Character queimaEstoque) {
this.queimaEstoque = queimaEstoque;
}
public String getSemelhantes() {
return semelhantes;
}
public void setSemelhantes(String semelhantes) {
this.semelhantes = semelhantes;
}
public Integer getTipoProduto() {
return tipoProduto;
}
public void setTipoProduto(Integer tipoProduto) {
this.tipoProduto = tipoProduto;
}
public ProdutoEco getProdutoEco() {
return produtoEco;
}
public void setProdutoEco(ProdutoEco produtoEco) {
this.produtoEco = produtoEco;
}
public ProdutoVaz getProdutoVaz() {
return produtoVaz;
}
public void setProdutoVaz(ProdutoVaz produtoVaz) {
this.produtoVaz = produtoVaz;
}
public ProdutoVazCap getProdutoVazCap() {
return produtoVazCap;
}
public void setProdutoVazCap(ProdutoVazCap produtoVazCap) {
this.produtoVazCap = produtoVazCap;
}
}
Classe ProdutoVaz, que seria no caso os detalhes do produto:
package br.com.minhaEmpresa.modelo;
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.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotEmpty;
@Entity
@Table(name = "TAB_PROD_VAZ_DT")
public class ProdutoVaz {
@Id
@Column(length = 19)
@GeneratedValue(strategy = GenerationType.IDENTITY) // MYSQL
private Integer id;
@NotEmpty
@Column(name = "codigo_produto", length = 24)
private String codigoProduto;
@Column(name = "ate_ano", length = 10)
private String ateAno;
@Column
private Integer cilindrada;
@Column(name = "de_ano", length = 4)
private String deAno;
@Column(name = "dianteira_traseira", length = 3)
private String dianteiraTraseira;
@Column(length = 80)
private String modelo;
@Column(length = 30)
private String montadora;
@Column(name = "nro_dentes_elos", length = 10)
private Integer nroDentesElos;
@Column(name = "pinca_dupla", columnDefinition = "Character(1)")
private Character pincaDupla;
@Column(name = "sulfixo_opcional", length = 6)
private String sulfixoOpcional;
/******************************************************************************/
// MAPEAMENTO:
@OneToOne(mappedBy = "produtoVaz")
private Produto produto;
@OneToMany
@JoinColumn(name = "produtoVazKit_id")
private List<ProdutoVazKit> produtoVazKits;
@OneToMany
@JoinColumn(name = "produtoVazPrefixo_id")
private List<ProdutoVazPrefixo> produtoVazPrefixos;
/******************************************************************************/
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCodigoProduto() {
return codigoProduto;
}
public void setCodigoProduto(String codigoProduto) {
this.codigoProduto = codigoProduto;
}
public String getAteAno() {
return ateAno;
}
public void setAteAno(String ateAno) {
this.ateAno = ateAno;
}
public Integer getCilindrada() {
return cilindrada;
}
public void setCilindrada(Integer cilindrada) {
this.cilindrada = cilindrada;
}
public String getDeAno() {
return deAno;
}
public void setDeAno(String deAno) {
this.deAno = deAno;
}
public String getDianteiraTraseira() {
return dianteiraTraseira;
}
public void setDianteiraTraseira(String dianteiraTraseira) {
this.dianteiraTraseira = dianteiraTraseira;
}
public String getModelo() {
return modelo;
}
public void setModelo(String modelo) {
this.modelo = modelo;
}
public String getMontadora() {
return montadora;
}
public void setMontadora(String montadora) {
this.montadora = montadora;
}
public Integer getNroDentesElos() {
return nroDentesElos;
}
public void setNroDentesElos(Integer nroDentesElos) {
this.nroDentesElos = nroDentesElos;
}
public Character getPincaDupla() {
return pincaDupla;
}
public void setPincaDupla(Character pincaDupla) {
this.pincaDupla = pincaDupla;
}
public String getSulfixoOpcional() {
return sulfixoOpcional;
}
public void setSulfixoOpcional(String sulfixoOpcional) {
this.sulfixoOpcional = sulfixoOpcional;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public List<ProdutoVazKit> getProdutoVazKits() {
return produtoVazKits;
}
public void setProdutoVazKits(List<ProdutoVazKit> produtoVazKits) {
this.produtoVazKits = produtoVazKits;
}
public List<ProdutoVazPrefixo> getProdutoVazPrefixos() {
return produtoVazPrefixos;
}
public void setProdutoVazPrefixos(List<ProdutoVazPrefixo> produtoVazPrefixos) {
this.produtoVazPrefixos = produtoVazPrefixos;
}
}
Meu ProdutoDao:
package br.com.minhaEmpresa.dao;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import br.com.caelum.vraptor.Result;
import br.com.minhaEmpresa.modelo.Montadora;
import br.com.minhaEmpresa.modelo.Produto;
import br.com.minhaEmpresa.modelo.TipoProduto;
@RequestScoped
public class ProdutoDao {
private EntityManager manager;
@Inject
public ProdutoDao(EntityManager manager) {
this.manager = manager;
}
// PARA USO DO CDI
public ProdutoDao() {
}
public void salva(Produto produto) {
manager.getTransaction().begin();
if (produto.getId() == null) {
manager.persist(produto);
} else {
manager.merge(produto);
}
manager.getTransaction().commit();
manager.close();
}
/*****************************************************************************************************/
public Produto atualizaProdutoVaz(Integer id, Result result) {
Produto produto = this.buscaProdutoVaz(id);
return produto;
}
public Produto atualizaProdutoEco(Integer id, Result result) {
Produto produto = this.buscaProdutoEco(id);
return produto;
}
public Produto atualizaProdutoVazCap(Integer id, Result result) {
Produto produto = this.buscaProdutoVazCap(id);
return produto;
}
/*****************************************************************************************************/
public Produto buscaProdutoVaz(Integer id) {
try {
TypedQuery<Produto> query = manager.createQuery("Select pvaz.codigoProduto, p.descricaoTipoProduto, "
+ "pvaz.sulfixoOpcional, pvaz.montadora, pvaz.modelo, pvaz.deAno, pvaz.ateAno, "
+ "pvaz.cilindrada, pvaz.nroDentesElos, pvaz.dianteiraTraseira, pvaz.pincaDupla, "
+ "p.marca, p.original, p.liberado, p.lancamento, p.promocao, p.queimaEstoque, "
+ "p.preco, p.semelhantes, p.imagemEmbalagem, p.imagem, p.localImagem, p.peso, "
+ "p.ean, p.ncm, p.catalogo "
+ "From Produto p left join ProdutoVaz pvaz on p.codigoProduto = pvaz.codigoProduto "
+ "Where p.id = :id", Produto.class);
query.setParameter("id", id);
return query.getSingleResult();
} catch (Exception e) {
return null;
}
}
public Produto buscaProdutoEco(Integer id) {
try {
TypedQuery<Produto> query = manager.createQuery("Select peco.codigoProduto, p.descricaoTipoProduto, "
+ "peco.montadora, peco.modelo, peco.deAno, peco.ateAno, peco.linhaVeiculo, "
+ "peco.sistemaFreio, peco.dianteiraTraseira, p.marca, p.original, p.liberado, "
+ "p.lancamento, p.promocao, p.queimaEstoque, p.preco, p.semelhantes, p.imagemEmbalagem, "
+ "p.imagem, p.localImagem, peco.comprimento, peco.largura, peco.espessura, p.catalogo "
+ "From Produto p join ProdutoEco peco on p.codigoProduto = peco.codigoProduto "
+ "Where p.id = :id", Produto.class);
query.setParameter("id", id);
return query.getSingleResult();
} catch (Exception e) {
return null;
}
}
public Produto buscaProdutoVazCap(Integer id) {
try {
TypedQuery<Produto> query = manager.createQuery("Select pvazcap.codigoProduto, p.descricaoTipoProduto, "
+ "pvazcap.codigoRapido, p.marca, pvazcap.modeloTipoProduto, pvazcap.descricao, pvazcap.modelo, "
+ "pvazcap.tamanho, pvazcap.cor, pvazcap.decal, pvazcap.corDecal, pvazcap.adesivo, "
+ "pvazcap.corAdesivo, p.original, p.liberado, p.lancamento, p.promocao, p.queimaEstoque, "
+ "p.preco, p.semelhantes, p.imagemEmbalagem, p.imagem, p.localImagem, p.catalogo "
+ "From Produto p join ProdutoVazVap pvazcap on p.codigoProduto = pvazcap.codigoProduto "
+ "Where p.id = :id", Produto.class);
query.setParameter("id", id);
return query.getSingleResult();
} catch (Exception e) {
return null;
}
}
/*****************************************************************************************************/
public TipoProduto buscaTPPorDescricao(String descricaoTipoProduto) {
try {
TypedQuery<TipoProduto> query = manager.createQuery(
"Select tp From TipoProduto tp where tp.descricaoTipoProduto = :descricaoTipoProduto",
TipoProduto.class);
query.setParameter("descricaoTipoProduto", descricaoTipoProduto);
return query.getSingleResult();
} catch (Exception e) {
return null;
}
}
public List<TipoProduto> listaTipoProduto(String marca) {
try {
TypedQuery<TipoProduto> query = manager.createQuery(
"Select tp From TipoProduto tp Where tp.marca = :marca Order By tp.descricaoTipoProduto",
TipoProduto.class);
query.setParameter("marca", marca);
return query.getResultList();
} catch (Exception e) {
return null;
}
}
/*****************************************************************************************************/
public List<Produto> listaVaz(String marca1, String marca2) {
try {
TypedQuery<Produto> query = manager
.createQuery("Select p.codigoProduto, p.tipoProduto, p.descricaoTipoProduto, pvaz.montadora, "
+ "pvaz.modelo, pvaz.deAno, pvaz.ateAno, pvaz.cilindrada, pvazprefixo.tipoCorrente, "
+ "pvaz.nroDentesElos, pvaz.dianteiraTraseira, p.original, p.promocao, p.queimaEstoque, "
+ "p.preco, p.imagem, p.peso "
+ "From Produto p join ProdutoVaz pvaz on p.codigoProduto = pvaz.codigoProduto "
+ "join ProdutoVazPrefixo pvazprefixo on pvaz.codigoProduto = pvazprefixo.codigoProduto "
+ "and p.marca = :marca1 or p.marca = :marca2 ", Produto.class);
query.setParameter("marca1", marca1);
query.setParameter("marca2", marca2);
if (query.getResultList().isEmpty()) {
System.out.println("ProdutoDao: A query está VAZIA...");
} else {
System.out.println("ProdutoDao: A query NÃO está VAZIA...");
}
List<Produto> resultado = query.getResultList();
return resultado;
} catch (Exception e) {
return null;
}
}
public List<Produto> listaEco(String marca) {
try {
TypedQuery<Produto> query = manager.createQuery(
"Select peco.codigoProduto, peco.montadora, peco.modelo, peco.deAno, peco.ateAno, "
+ "peco.linhaVeiculo, peco.sistemaFreio, peco.dianteiraTraseira, p.original, "
+ "p.preco, p.semelhantes, peco.comprimento, peco.largura, peco.espessura "
+ "From Produto p join ProdutoEco peco on p.codigoProduto = peco.codigoProduto ",
Produto.class);
query.setParameter("marca", marca);
return query.getResultList();
} catch (Exception e) {
return null;
}
}
public List<Produto> listaVazCap(String marca) {
try {
TypedQuery<Produto> query = manager.createQuery(
"Select pvazcap.codigoProduto, pvazcap.tipoProduto, pvazcap.descricaoTipoProduto, "
+ "pvazcap.codigoRapido, pvazcap.descricao, pvazcap.modelo, pvazcap.tamanho, "
+ "pvazcap.cor, pvazcap.decal, pvazcap.corDecal, pvazcap.adesivo, "
+ "pvazcap.corAdesivo, p.preco, p.semelhantes "
+ "From Produto p join ProdutoVazCap pvazcap on p.codigoProduto = pvazcap.codigoProduto ",
Produto.class);
query.setParameter("marca", marca);
return query.getResultList();
} catch (Exception e) {
return null;
}
}
/*********************************************************************************************************************/
public List<Montadora> listaMontadora(String marca) {
try {
TypedQuery<Montadora> query = manager
.createQuery("Select m From Montadora m Where m.marca = :marca Order By m.nome", Montadora.class);
query.setParameter("marca", marca);
return query.getResultList();
} catch (Exception e) {
return null;
}
}
}
ProdutoController:
package br.com.minhaEmpresa.controller;
import java.io.File;
import java.util.List;
import javax.inject.Inject;
import javax.validation.Valid;
import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.IncludeParameters;
import br.com.caelum.vraptor.validator.Validator;
import br.com.minhaEmpresa.dao.ProdutoDao;
import br.com.minhaEmpresa.modelo.Montadora;
import br.com.minhaEmpresa.modelo.Produto;
import br.com.minhaEmpresa.modelo.TipoProduto;
@Controller
public class ProdutoController {
private ProdutoDao produtoDao;
private Result result;
private Validator validator;
@Inject
public ProdutoController(ProdutoDao produtoDao, Result result, Validator validator) {
this.produtoDao = produtoDao;
this.result = result;
this.validator = validator;
}
// PARA USO DO CDI
public ProdutoController() {
}
public void formVaz() {
listaTipoProduto("VAZ");
listaMontadora("VAZ");
}
public void formEco() {
listaTipoProduto("ECOPADS");
listaMontadora("ECOPADS");
}
public void formVazCap() {
listaTipoProduto("VAZCAP");
listaMontadora("VAZCAP");
}
/*****************************************************************************************/
// MÉTODO SALVA:
@IncludeParameters
public void salvaVaz(@Valid Produto produto, TipoProduto tipoProduto) {
validator.onErrorRedirectTo(this).formVaz();
tipoProduto = produtoDao.buscaTPPorDescricao(produto.getDescricaoTipoProduto());
produto.setTipoProduto(tipoProduto.getTipoProduto());
produtoDao.salva(produto);
result.redirectTo(this).listaVaz();
}
@IncludeParameters
public void salvaEco(@Valid Produto produto, TipoProduto tipoProduto) {
validator.onErrorRedirectTo(this).formEco();
tipoProduto = produtoDao.buscaTPPorDescricao(produto.getDescricaoTipoProduto());
produto.setTipoProduto(tipoProduto.getTipoProduto());
produtoDao.salva(produto);
result.redirectTo(this).listaEco();
}
@IncludeParameters
public void salvaVazCap(@Valid Produto produto, TipoProduto tipoProduto) {
validator.onErrorRedirectTo(this).formVazCap();
produtoDao.salva(produto);
result.redirectTo(this).listaVazCap();
}
/*****************************************************************************************/
// MÉTODO ATUALIZA:
public void atualizaVaz(Integer id, Result result) {
Produto produto = produtoDao.buscaProdutoVaz(id);
result.include(produto);
listaTipoProduto("VAZ");
listaMontadora("VAZ");
imgProdutoVaz(id);
result.of(this).formVaz();
}
public void atualizaEco(Integer id, Result result) {
Produto produto = produtoDao.buscaProdutoEco(id);
result.include(produto);
listaTipoProduto("ECOPADS");
listaMontadora("ECOPADS");
imgProdutoEco(id);
result.of(this).formEco();
}
public void atualizaVazCap(Integer id, Result result) {
Produto produto = produtoDao.buscaProdutoVazCap(id);
result.include(produto);
listaTipoProduto("VAZCAP");
listaMontadora("VAZCAP");
imgProdutoVazCap(id);
result.of(this).formVazCap();
}
/*****************************************************************************************/
// MÉTODOS PARA CARREGAR IMAGEM DO PRODUTO NO FORM:
@Get("produto/{id}/imgProdutoVaz")
public File imgProdutoVaz(Integer id) {
Produto produto = produtoDao.buscaProdutoVaz(id);
// CAMINHO PARA CARREGAR A IMAGEM DURANTE O DESENVOLVIMENTO:
String caminho = produto.getLocalImagem() + "\\" + produto.getImagem();
// CAMINHO PARA CARREGAR A IMAGEM NO SERVIDOR LINUX:
// String caminho = produto.getLocalImagem().toString().replace("F:",
// "/mnt/fileserver/minhaEmpresa") + "/" + produto.getImagem();
caminho = caminho.replace("\\", "/");
if (!caminho.contains("jpg")) {
return null;
} else {
File arquivo = new File(caminho);
return arquivo;
}
}
@Get("produto/{id}/imgProdutoEco")
public File imgProdutoEco(Integer id) {
Produto produto = produtoDao.buscaProdutoEco(id);
// CAMINHO PARA CARREGAR A IMAGEM DURANTE O DESENVOLVIMENTO:
String caminho = produto.getLocalImagem() + "\\" + produto.getImagem();
// CAMINHO PARA CARREGAR A IMAGEM NO SERVIDOR LINUX:
// String caminho = produto.getLocalImagem().toString().replace("F:",
// "/mnt/fileserver/minhaEmpresa") + "/" + produto.getImagem();
caminho = caminho.replace("\\", "/");
if (!caminho.contains("jpg")) {
return null;
} else {
File arquivo = new File(caminho);
return arquivo;
}
}
@Get("produto/{id}/imgProdutoVazCap")
public File imgProdutoVazCap(Integer id) {
Produto produto = produtoDao.buscaProdutoVaz(id);
// CAMINHO PARA CARREGAR A IMAGEM DURANTE O DESENVOLVIMENTO:
String caminho = produto.getLocalImagem() + "\\" + produto.getImagem();
// CAMINHO PARA CARREGAR A IMAGEM NO SERVIDOR LINUX:
// String caminho = produto.getLocalImagem().toString().replace("F:",
// "/mnt/fileserver/minhaEmpresa") + "/" + produto.getImagem();
caminho = caminho.replace("\\", "/");
if (!caminho.contains("jpg")) {
return null;
} else {
File arquivo = new File(caminho);
return arquivo;
}
}
/*****************************************************************************************/
// MÉTODO LISTA DE PRODUTOS DE CADA EMPRESA
public void listaVaz() {
List<Produto> produtos = produtoDao.listaVaz("VAZ", "XTREME");
if(produtos == null){
System.out.println("ProdutoController: A List produtos está NULA...");
} else{
System.out.println("ProdutoController: A List produtos NÃO está NULA...");
}
result.include("produtos", produtos);
}
public void listaEco() {
List<Produto> produtos = produtoDao.listaEco("ECOPADS");
result.include("produtos", produtos);
}
public void listaVazCap() {
List<Produto> produtos = produtoDao.listaVazCap("VAZCAP");
result.include("produtos", produtos);
}
/*****************************************************************************************/
public void listaMontadora(String marca) {
List<Montadora> montadoras = produtoDao.listaMontadora(marca);
result.include("montadoras", montadoras);
}
public void listaTipoProduto(String marca) {
List<TipoProduto> tiposProduto = produtoDao.listaTipoProduto(marca);
result.include("tiposProduto", tiposProduto);
}
}