sql >> Databáze >  >> RDS >> Mysql

Jak naplnit hodnoty cizích klíčů v konfiguraci Hibernate + Spring JPA, když jsou současně zachovány nadřazené/podřízené objekty?

Tento kód má dvě věci, které mu brání v práci:

  1. Vaše entity nemají @Id . Pravděpodobně jste to právě vynechali, protože toto je příklad, ale stojí za to upozornit.
  2. Dvakrát jste namapovali sloupec parent_id . Dítě má dlouhé pole i nadřazené pole namapované na stejný sloupec. Zbavte se Longa. Jde o rodičovský vztah, o který vám jde.

Poté, co tam máte, je zcela tradiční obousměrné one-to-many se sloupcem spojení. Pokud vám to nefunguje, pak děláte něco špatně v kódu, kde je vytváříte a ukládáte. Velmi pravděpodobně nevytváříte objekty správně. Správný kód využívající tyto entity by vypadal asi takto:

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();

Všimněte si zejména, že dítě by mělo být nastaveno v rodiči stejně jako rodič v dítěti. Nestavějte polorozbitý objektový model a nečekejte, že hibernace uklidí váš nepořádek. Mnoho lidí tento zdánlivě zřejmý požadavek ignoruje a diví se, proč se Hibernate zdá nestabilní a/nebo nespolehlivá.




  1. Zobrazit rozevírací seznam v HTML s PHP

  2. Výpis a přepínání databází v PostgreSQL

  3. Jak nasadit aplikaci s databází serveru SQL na klientech

  4. Alternativy PGTune - Konfigurace ClusterControl PostgreSQL