Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como preencher valores de chave estrangeira em uma configuração Hibernate + Spring JPA quando objetos pai/filho são persistidos ao mesmo tempo?


Esse código tem duas coisas que o impedem de funcionar:
  1. Suas entidades não têm @Id . Você provavelmente deixou de lado porque este é um exemplo, mas vale a pena ressaltar.
  2. Você mapeou duas vezes a coluna parent_id . Filho tem um campo Longo e um campo Pai mapeados para a mesma coluna. Livre-se do Longo. É o relacionamento pai que você procura.

Depois disso, o que você tem é um um-para-muitos bidirecional completamente tradicional com uma coluna de junção. Se não estiver funcionando para você, você está fazendo algo errado no código em que você os cria e salva. Muito provavelmente, você não está criando os objetos corretamente. O código correto usando essas entidades seria algo assim:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Parent p = new Parent();
Child child = new Child();
child.parent = p;
Child child1 = new Child();
child1.parent = p;
p.children = Arrays.asList(child, child1);
session.save(p);
session.save(p.children.get(0));
session.save(p.children.get(1));
tx.commit();

Observe especialmente que o filho deve ser definido no pai, assim como o pai no filho. Não construa um modelo de objeto meio quebrado e espere que o Hibernate limpe sua bagunça. Muitas pessoas ignoram este requisito aparentemente óbvio e se perguntam por que o Hibernate parece instável e/ou não confiável.