Jak propojit DB tabulky ve Spring JPA – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak propojit DB tabulky ve Spring JPA – Java – Fórum – Programujte.comJak propojit DB tabulky ve Spring JPA – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
ingiraxo+15
Grafoman
18. 12. 2014   #1
-
0
-

Hoj, potřeboval bych radu.

Pokouším se přess spring JPA propojit 3 DB tabulky, ale nějak mi to nejde.
Mám 3 tabulky (User - seznam uživatelů, Role - vyčet všech rolí, UserRole - mapovací tabulka mezi User a Role).

Na entite User bych chtěl vytvořit set na Role a to samé na entite Role a set na User, ale ty nejsou svázaný s uživatelem, jedná se o výčet. Takže na základě propojovací tabulky UserRole bych chtěl na User získat výčet jeho rolí a to samé na Role seznam User, které mají tu roli :)

Nejsem expert na anotace v JPA :-) Díky za rady

// seznam vsech uzivatelu
@Entity
@Table(name = "user")
public class User extends AbstractEntity
{
    // PK + dalsi fieldy

    // muj pokus o vytvoreni seznamu Role pro uzivatele - NEFUNGUJE
    @OneToMany(targetEntity = Role.class)
    @JoinColumn(table = "user_role", name = "fk_user")
    private Set<Role> roles;
}

// enum vsech dostupnych roli
@Entity
@Table(name = "role")
public class Role extends AbstractEntity
{
    // PK + dalsi fieldy

    // pokud o ziskani vsech Uzivatelu pro Role - NEFUNGUJE
    @OneToMany
    @JoinColumn(table = "user_role", name = "fk_user")
    private Set<User> users;
}

// propojovaci tabulka mezi roli a uzivatelem
@Entity
@Table(name = "user_role")
public class UserRole extends AbstractEntity
{
    // PK se SEQ

    @OneToOne
    @JoinColumn(name = "fk_user") // v DB jako PK na User
    private User user;

    @OneToOne
    @JoinColumn(name = "fk_role") // v DB jako PK na Role
    private Role role;
}

PS: Jen doplnim, že ve výsledku by to mělo fungovat tak, že při vytažení třeba konkrétního uživatele se automaticky vytáhnou všechny jeho Role (to samé při získání Role)

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
18. 12. 2014   #2
-
0
-

Už jsem na to přišel, takže zamykám.

V případě rolí na  uživatele je to takto (u uživatelů na roli jen obráceně)

@OneToMany
@JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "fk_user", referencedColumnName = "pk_id") }, inverseJoinColumns = { @JoinColumn(name = "fk_role", referencedColumnName = "pk_id") })
private List<Role> roles;
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
NotBeginner
~ Anonymní uživatel
185 příspěvků
19. 12. 2014   #3
-
0
-

Je nějaký důvod používat pro to Spring? Jakou to má výhodu.

- např. oproti EclipseLink nebo Hibernate. Či jsi jenom na to více zvyklí nebo v tom máš větší zkušenost?

Nahlásit jako SPAM
IP: 217.112.161.–
ingiraxo+15
Grafoman
19. 12. 2014   #4
-
0
-

#3 NotBeginner
Spring JPA využívá Hibernate a HQL (řekl bych, že to je rozšířená verze elipseLink) a pro Spring JPA potřebuju stejně Spring Core, tak proč rovnou nevyužít vše co umí. Přijde mi i pohodlnější mít appContext a na všechno používat anotace a autowire

Už jen proto, že dělám menší web app a Spring mi přišel jako nejlepší řešení. Hlavně v tom delám skoro denně, takže je pro mě lepší využít Spring.

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
NotBeginner
~ Anonymní uživatel
185 příspěvků
20. 12. 2014   #5
-
0
-

Právě pro to mě to zarazilo.  Protože jsem neslyšel, že by Spring umožnoval přímo pracovat s Entitami a nikde v dokumentaci jsem o tom nečetl. A zase mě zařáží přidávat další framework který nepřidává žádnou hodnou když člověk může pracovat přímo s Hibernate nebo EclipseLink.

Přiznám se ve Springu jsem začátečník ale nevidím v něm zase takový přínos, ale to nevidím i např. v Antu,Mavenu. Skoro vše co umí Spring umí i EE7 případně v kombinaci s jinými Frameworky.

Nahlásit jako SPAM
IP: 217.112.161.–
ingiraxo+15
Grafoman
20. 12. 2014   #6
-
0
-

#5 NotBeginner
Spring JPA je něco jako modul, co rozšiřuje EclipseLink, aby si byl schopen pracovat s entitami ve Springu a hlavně přidává repozitáře, díky kterým nemušíš vytvážet základní vrstvu nad práci s tabulkou.. http://projects.spring.io/spring-data-jpa/

Spring má dost modulů a mám dojem, že na všechny potřebuješ spring-core a on práve přidává podporu appContextu, což je xml (od verze 4 to jde i bez něj), kde jsou definice bean a provázání, co se provede při spuštění app, řídí tak scope instancí objektů (singleton, session, request, prototype,...). Takže nikde v app nevytváříš instance objektů, ale vše si řídí spring. Ale to je jen zlomek toho co umí...

Ant asi pro domácí potřeby moc nevyužiješ, ale používá se pro buildění větších app, kdy např. potřebuješ při buildu rozkopírovat knihovny nebo jiný .java soubory nebo statickej obsah do jinych projektů ve workstation.

Maven je hustá věc. Ten i doma používám, Jen si tam nastavíš závisloti na libky a pokud je nemáš na lokálu, tak ti je dotáhne automaticky. A při buildu ti je embedne do .jar/.war. Má i víc možností, ale mě postačuje tahle featura.

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý