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

Relacionamento - ManyToOne

public class TestaRelacionamento { public static void main(String[] args) { Conta conta = new Conta(); conta.setTitular("Ana Maria"); conta.setBanco("Itau"); conta.setNumero("54321"); conta.setAgencia("111"); Movimentacao movimentacao = new Movimentacao(); movimentacao.setData(Calendar.getInstance()); movimentacao.setDescricao("Conta de luz"); movimentacao.setTipoMovimentacao(TipoMovimentacao.SAIDA); movimentacao.setValor(new BigDecimal("123.9")); movimentacao.setConta(conta); EntityManager manager = new JPAUtil().getEntityManager(); manager.getTransaction().begin(); manager.persist(movimentacao); manager.getTransaction().commit(); manager.close(); } } Porque chamamos o método movimentacao.setConta(conta) para gravar os dados? E como ele vai relacionar os campos dessa movimentação com a chave prim´´aria de conta, levando em consideração que a conta já exista?

4 respostas

Porque chamamos o método movimentacao.setConta(conta) para gravar os dados?

Não é usado para gravar os dados. É usado para fazer o relacionamento entre a entidade Movimentacao e Conta. Uma Movimentacao deve ser vinculada a uma Conta.

E como ele vai relacionar os campos dessa movimentação com a chave primária de conta, levando em consideração que a conta já exista?

A classe Movimentacao ter um atributo Conta implica que existe um relacionamento (OneToOne, OneToMany, ManyToOne ou ManyToMany) ali representando a chave estrangeira.

Arthur, a anotação irá realizar o relacionamentoe. A aplicação irá criar uma tabela e irá atualizá-la no void main. E o meu questionamento é sobre a gravação dos dados em um conta já existente. É necessário passar apenas o id da conta existente?

Sim, claro que você não irá usar o persist() pois irá criar uma nova linha no banco.

solução!

Willian, não necessariamente vai criar uma nova linha no banco. Isso que é capcioso. Só vai criar uma linha nova se o objeto tiver o ID vazio. Não tenho certeza agora, mas acho que se você chamar o persist passando um ID ele lança uma exception, mas eu não tenho total certeza. Preciso saber mais.

Thiago, sim, basta você passar um ID. Quando você persistir a sua movimentação nova, o JPA vai fazer o relacionamento deste novo registro ao registro do ID que você passou.