Duvida Hibernate Salvamento de Dados

5 respostas
R

Ola pessoal.

Tenho Duas Tabelas us_Usuarios e a us_Grupo, onde a minha intencao e armazenar os Dados do Usuario e a qual Grupo de Usuario Pertence, ate ai tudo bem, mais no momento em que chamo o salvamento via Hibernate ele esta salvando perfeitamente na tabela de us_Usuarios mais na Tabela de us_Grupo ele duplica os dados, Tipo, suponhamos que eu ja tenha um grupo de Usuario do Tipo Administrador, se eu executar o Salvamento ele vai criar um novo Grupo do Tipo Administrador, como fazer para ele saber que este determinado Grupo ja existe e salvar somente o Codigo do mesmo.

Classe de Usuario:

public class us_Usuario
{
    @Id
    @SequenceGenerator(name="generator_us_usuario",sequenceName="sequence_us_usuario")
    @GeneratedValue(generator="generator_us_usuario")

    private long usu_codigo;

    @Column(name ="usu_login", length = 30)
    private String usu_login;

    @Column(name="usu_senha",  length = 25)
    private String usu_senha;

    @OneToOne
    @Cascade(CascadeType.ALL)
    @JoinColumn( name = "cod_grupo_usuario")
    private us_Grupo grupo;

Classe de Grupo de Usuario:

public class us_Grupo
{

    @Id
    @SequenceGenerator(name="generator_us_grupo",sequenceName="sequence_us_grupo")
    @GeneratedValue(generator="generator_us_grupo")

    private long gru_codigo;

    @Column(name ="gru_descricao", length=30)
    private String gru_descricao;
Realizando o Salvamento do Usuario :
public void Salvando()
    {
        try
        {
            AnnotationConfiguration cfg = new AnnotationConfiguration();
            cfg.addAnnotatedClass (us_Usuario.class);
            cfg.addAnnotatedClass (us_Grupo.class);

            SessionFactory fabrica = cfg.buildSessionFactory();
            Session sessao = fabrica.openSession();

            org.hibernate.Transaction tx_pessoa = sessao.beginTransaction();

            us_Grupo    objGrupo    = new us_Grupo();
            objGrupo.setGru_descricao("Administrador");
           

            us_Usuario objUsuario  = new us_Usuario();
            objUsuario.setUsu_login ("Ricardo");
            objUsuario.setGrupo     (objGrupo);
            objUsuario.setUsu_senha ("Rick");

            
            sessao.save(objUsuario);
            tx_pessoa.commit();
            sessao.close();

Muito Obrigado a Todos um Forte abraco e muito obrigado pela ajuada desde ja.

5 Respostas

G

Ah, essa é fácil! Basta vc parar de criar um novo objeto grupo toda vez for adicionar um usuário! Ou seja, primeiro crie os grupos que vão ser utilizados, depois apenas consulte os grupos e faça usuario.setGrupo(objGrupo) sakô?

G

Outra coisa importante! Configure a coluna de descrição do grupo como UNIQUE e a própria tabela já irá rejeitar grupo duplicado. Então crie o grupo apenas uma vez, busque o grupo e adicione no seu usuário. Prontim, espero ter ajudado!

R

Amigo fico, muito mais muito grato pela ajuda mesmo, mais tem como eu fazer isso automatico, tipo eu estou na primeira fase do sistema, terei outras tabelas quero criar isto de forma dinamica, tipo por exemplo, no futuro quando tiver uma tabela de clientes, com varios campos e chaves estrageiras do tipo naturalidade, nacionalidade, esta civil, etc, onde o usuario pode estar criando o tempo todo, terei de fazer uma funcao por exemplo para pegar o valor do indice para salvar na tabela de cliente ? Fui claro pessoal, espero que sim , um forte abraco a todos …

G

rick1902 vou ser honesto, talvez eu esteja enganado mas sua pergunta, embora perspicaz, revela um desenvolvedor nível baby, isto é, que ainda está na fase do “leite” tentando entender como funciona a lógica da coisa. Por isso acho que você vai ter ler e praticar muitos tutoriais. Dica: Video-aula também é uma boa!

Se eu estiver enganado, por favor, desconsidere estas palavras!

R

E Amigo voce tem razao, moro atualmente nos EUA, trabalhei por mais de 14 anos com a linguagem Delphi, la eu desenvolvo isto de olhos fechados, mais aqui na america a coisa e bem diferente do Brasil, estou tendo que me adaptar ao mundo java e do codigo aberto, otimo, pela portabilidade, agradeco de mais a atencao e presteza de todos, e realmente estou dando os primeiro passos no mundo Java, obrigado.

Criado 15 de dezembro de 2010
Ultima resposta 16 de dez. de 2010
Respostas 5
Participantes 2