Problemas ao atualizar dados utilizando java + hibernate annotations

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 …

Como esta este nome de fabricante no banco, pois você esta usando operador LIKE para fazer a consulta.
E quando você vai salvar o fabricante esta verificando se ele existe, como você verifica?

[quote=jtiagoarruda]Como esta este nome de fabricante no banco, pois você esta usando operador LIKE para fazer a consulta.
E quando você vai salvar o fabricante esta verificando se ele existe, como você verifica?[/quote]
O problema é que existe mais de um Produto associado à este fabricante.
Logo, o getUniqueResult não funciona.

De onde você tirou que esse problema é de “Java Básico”?

Tópico movido para o fórum de Hibernate.
Por favor, leia com atenção a lista de fóruns antes de postar.

[quote=jtiagoarruda]Como esta este nome de fabricante no banco, pois você esta usando operador LIKE para fazer a consulta.
E quando você vai salvar o fabricante esta verificando se ele existe, como você verifica?[/quote]

Drsmachado :
Olha só … o nome esta identico ao q esta no arquivo. Tipo, antes de importar os produtos, eu importo o fabricante, logo, o nome esta igual.
Eu busco o fabricante através desde código :

Query fabBanco = sessao.createQuery("FROM Fabricante where nomeFabricante like '"+produto.getFabricante().getNomeFabricante()+"'");  

E depois referencio o fabricante do produto através desde :

produtoNovo.setFabricante((Fabricante) fabBanco.uniqueResult()); 

E sei, q nao tenho dois fabricantes cadastrados, por isso q uso o uniqueResult(). Quando mando importar o produtos … esta duplicando o fabricante … por isso a mensagem :
"query did not return a unique result : 2"
Em vez do meu codigo somente dar um Update no fabricante ele esta salvando o fabricante … afff… como se fosse um novo fabricante
Espero q tenha entendido drsmachado …
Obgo por responder … Drsmachado …

[quote=jtiagoarruda]Como esta este nome de fabricante no banco, pois você esta usando operador LIKE para fazer a consulta.
E quando você vai salvar o fabricante esta verificando se ele existe, como você verifica?[/quote]

JTiago :
Eu estou importando o Fabricante antes de importar os produtos …
O problema é q … ao importar o produto … meu código esta entendendo q o Fabricante que eu busco por aki :

Query fabBanco = sessao.createQuery("FROM Fabricante where nomeFabricante like '"+produto.getFabricante().getNomeFabricante()+"'");  

É um novo fabricante … em vez de somente dar um update no frabricante q já existe no banco !!!
Espero q tenha sido claro …
Obgo por responder jTiado…

[quote=ViniGodoy]De onde você tirou que esse problema é de “Java Básico”?

Tópico movido para o fórum de Hibernate.
Por favor, leia com atenção a lista de fóruns antes de postar.[/quote]

ViniGodoy “I’m so sorry” … foi sem intensão mesmo … pra mim vejo como básico … hehe … desculpa mesmo !!! Vou tomar mais cuidado ao postar alguma coisa … I promise !!!