Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como fazer uma inserção em duas tabelas ao mesmo tempo?

Boa noite.

Estou com uma duvida, tenho duas tabelas usuario e endereco cardinalidade OneToOne (cada usuario so pode ter um endereco e vice-verça) , na tabela endereco, tenho uma chave estrangeira que se relaciona com o id do cliente, mas quando for cadastrar esse cliente eu estou pegando todos os dados para a inserção de um formulario, nesse momento de cadastro o usuario ainda nao vai ter um id , pra ele fazer a relação certo?

2 respostas
solução!

Você pode usar o cascade no relacionamento.. mas eu recomendo salvar primeiro o cliente e depois o endereço. Para vc ter controle sobre o que está acontecendo.

Alberto boa noite, pensei nisso também, mas nem a inserção conseguir fazer, devo estar fazendo errado são muitos parâmetros.

metodo para inserção :

public Usuario inseriUsuario(String nome, String senha, String email, String emailAlternativo, String telefone,
            String cep, String cidade, String uf, Integer numero, String logradouro, String roles) {

        Usuario usuario = (Usuario) manager.createNamedQuery("insert into Usuario (nome,senha,telefone,email,emailAleternativo,roles) values (nome=:nome,senha=:senha,telefone=:telefone,email=:email,emailAlternativo=:emailAlternativo,roles=:roles)")
                .setParameter("nome", "'"+nome+"'")
                .setParameter("senha", "'"+senha+"'")
                .setParameter("telefone", "'"+telefone+"'")
                .setParameter("email", "'"+email+"'")
                .setParameter("emailAlternativo", "'"+emailAlternativo+"'")
                .setParameter("roles", "'"+roles+"'");


        manager.createNamedQuery("insert into Endereco(cep, cidade,uf,numero,logradouro,usuario_id) values (cep=:cep,cidade=:cidade,uf=:uf,numero=:numero,logradouro=:logradouro,usuario_id=:usuario)")
                .setParameter("cep", "'"+cep+"'")
                .setParameter("cidade", "'"+cidade+"'")
                .setParameter("uf", "'"+uf+"'")
                .setParameter("numero", numero)
                .setParameter("logradouro", "'"+logradouro+"'")
                .setParameter("usuario_id", usuario.getId());


        return usuario;

    }

eu recebo esse erro:

No query defined for that name [insert into Usuario (nome,senha,telefone,email,emailAleternativo,roles) values (nome=:nome,senha=:senha,telefone=:telefone,email=:email,emailAlternativo=:emailAlternativo,roles=:roles)]