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)
#3NotBeginner
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.
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.
#5NotBeginner
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.