Olá galera !!!
Pessoal … sou estudante … estou fazendo um projetinho aki … tipo … lendo um arquivo .txt e jogando no banco de dados.
Olhem só, tenho uma tabela chamada produto, cod de barras e uma outra chamada fornecedores.
No meu arquivo .txt, tenho as informações de produto, dos fornecedores de cada produto e seu devido codigo de barras.
Os fornecedores, no arquivo, se repetem … um fornecedor pode ter mais q um produto. Filtrei essas informações e joguei na tabela fornecedores, sem as repeticões, somente os fornecedores distintos. Até aki blza …
Espero q vcs entendem o enunciado… hehehe … olhem tenho as seguintes classes :
Classe produtos :
@Entity
@Table(name="F1PRODUTO")
public class Produto implements Serializable{
@Id
@SequenceGenerator(name="generator_produto", sequenceName="F1PRODUTO_A1COD_GEN")
@GeneratedValue(generator="generator_produto")
@Column(name="a1cod")
private Integer idProduto;
@Column(name="a1nome", length=200, insertable=true, updatable=true)
private String descProduto;
@Column(name="a1ca_valcusto", precision=2, insertable=true, updatable=true)
private Double valCusto;
@Column(name="a1valvenda", precision=2, insertable=true, updatable=true)
private Double valVenda;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="A1FK7CODFABRICANTE", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Fabricante fabricante;
@OneToMany(mappedBy="produto", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<CodBarras> codBarra;
//Abaixo os metodos geters e seters
Classe Fabricantes :
@Entity
@Table(name="F7FABRICANTE")
public class Fabricante implements Serializable{
@Id
@SequenceGenerator(name="generator_fabricante", sequenceName="F7FABRICANTE_A7COD_GEN")
@GeneratedValue(generator="generator_fabricante")
@Column(name="a7cod")
private Integer idFabricante;
@Column(name="a7nome", length=62, insertable=true, updatable=true)
private String nomeFabricante;
@OneToMany(mappedBy="fabricante", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<Produto> produtos;
//Abaixo metodos geters e seters
Classe Cod de barras
@Entity
@Table(name="F69COD_BARRA")
public class CodBarras {
@Id
@Column(name="a69cod_barra")
private String codBarras;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="A69FK1COD_PRODUTO", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.SAVE_UPDATE)
private Produto produto;
//Abaixo metodos geters e seters
Pessoal, eu uso essa classe para jogar as informações para o banco de dados :
public class ControleBancoDados {
private static Session sessao;
private static Produto produtoNovo = new Produto();
public static void salvaDadosProdutos(Produto produto) {
try {
sessao = HibernateUtil.getSessao();
Transaction tx_produto = sessao.beginTransaction();
produtoNovo.setDescProduto(produto.getDescProduto());
produtoNovo.setValCusto(produto.getValCusto());
produtoNovo.setValVenda(produto.getValVenda());
produtoNovo.setCodBarra(new HashSet<CodBarras>());
produtoNovo.getCodBarra().add(produto.getCodBarra().iterator().next());
Query fabBanco = sessao.createQuery("FROM Fabricante where nomeFabricante like '"+produto.getFabricante().getNomeFabricante()+"'");
produtoNovo.setFabricante((Fabricante) fabBanco.uniqueResult());
sessao.saveOrUpdate(produtoNovo);
tx_produto.commit();
sessao.close();
} catch (Exception erro) {
JOptionPane.showMessageDialog(null, "Classe:ControleBancoDados\nMetodo:salvaDadosProdutos\n"+erro.getMessage());
}
}
Reparem q uso uma Query faBanco, para verificar se o fabricante já esta cadastro no banco, para ele nao repetir essa informação novamente no banco :
Query fabBanco = sessao.createQuery("FROM Fabricante where nomeFabricante like '"+produto.getFabricante().getNomeFabricante()+"'");
E depois informo que o produto vai receber esse fabricante :
produtoNovo.setFabricante((Fabricante) fabBanco.uniqueResult());
Ali no produtoNovo eu informei uniqueResult(), pois espero q no banco tenha somente um registro do fabricante.
Só que ao executar esse codigo todos … na hora de executar o sistema me apresenta a seguinte mensagem :
“query did not return a unique result : 2”
E quando verifico no banco, o codigo esta salvando duas vezes a informação do fabricante no banco !!!
Espero q tenha alguém q possa me ajudar … me dar umas dicas pra ver se estou fazendo correto.
Já bati a cabeça encima disso. Procurei nos forums, só q sem sucesso.
Por favor pessoal me deem uma luz ae … desde ja agradeco !!!
Abraços …