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

JPA přetrvává mnoho pro mnoho

Dobře, předně díky Mikkovi za to, že mě dovedl k odpovědi. Jen jsem chtěl poslat odpověď, která by mohla být přímo užitečná komukoli jinému, kdo by mohl být v pozici, ve které jsem byl. Také je to založeno na momentu Eureka, takže to nemusí být technicky správné, ale já to vidím takto.

Velký problém, kterému čelím, byl ten, že v MySQL jsem viděl přemosťovací tabulku jako samostatnou tabulku! (Omlouvám se, nemohu zveřejnit obrázek svého diagramu EER, ale zdá se, že v tuto chvíli nemám dostatečná oprávnění) Předpokládal jsem, že Java bude také vidět přemosťovací tabulku jako tabulku! No to ne. Tato překlenovací tabulka v Javě jako konvenční tabulka ve skutečnosti neexistuje, ve skutečnosti je reprezentována typem kolekce protilehlých tabulek, které k ní přiřadíte.

Nejjednodušší způsob, jak to vidět, pro mě bylo úplně zapomenout na přemosťovací tabulku a soustředit se na dvě „skutečné“ tabulky a přidružit v nich data. Následující kód NENÍ osvědčeným postupem, protože jednoduše nastavuji roli_id, ale je to v pořádku, abych ukázal svůj názor.

List<Roles> userRoleList = new ArrayList<Roles>();

Users currentUser = new Users();
currentUser.setUserId(userId);
currentUser.setUsername(email);
currentUser.setPassword(password);

Roles userRole = new Roles();
userRole.setRoleId("2");

userRoleList.add(userRole);
currentUser.setRolesCollection(userRoleList);

getUsersFacade().create(currentUser);

Naděje, která pomůže každému, kdo se potýká s mnoha až mnoha vztahy.

(Pozn. Upravil jsem původní kód otázky tak, aby se pro usnadnění používal seznam namísto kolekce, ale stejně dobře můžete použít jakýkoli jiný typ, který vyhovuje vašim potřebám.)



  1. MySQL Performance Cheat Sheet

  2. PostgreSQL:Odeberte atribut ze sloupce JSON

  3. MySQL – Udělejte z páru jedinečných hodnot

  4. Vyberte Všechny události s Událostí->Plán->Datum mezi počátečním a konečným datem v CakePHP