„Háttéralkalmazások/Záróvizsgatételek” változatai közötti eltérés
→6. JPA – használat: Tétel kidolgozása |
→6. JPA – használat: Tétel kidolgozása |
||
| 738. sor: | 738. sor: | ||
! colspan="2" |a DB-ben | ! colspan="2" |a DB-ben | ||
|- | |- | ||
!nem létezik | |||
!létezik | |||
|- | |- | ||
| rowspan="2" |a memóriában (perzisztenciakontextusban) | | rowspan="2" |a memóriában (perzisztenciakontextusban) | ||
| 786. sor: | 786. sor: | ||
=== Milyen módokon lehet lekérdezést megfogalmazni a JPA-ban? === | === Milyen módokon lehet lekérdezést megfogalmazni a JPA-ban? === | ||
{| class="wikitable" | {| class="wikitable mw-collapsible mw-collapsed" | ||
!komplexitás | !komplexitás | ||
!módszer | !módszer | ||
| 841. sor: | 841. sor: | ||
=== Hogyan bővíti a lehetőségeket a Spring Data JPA a lekérdezések megfogalmazásának területén? === | === Hogyan bővíti a lehetőségeket a Spring Data JPA a lekérdezések megfogalmazásának területén? === | ||
. | {| class="wikitable" | ||
|} | |||
{| class="wikitable" | |||
!jellemző | |||
!példakód | |||
!miben segít? | |||
|- | |||
|repositoryk | |||
használata | |||
|<syntaxhighlight lang="java" line="1"> | |||
interface BusRepository extends JpaRepository<Bus, Long> { } | |||
</syntaxhighlight> | |||
| rowspan="3" | | |||
* az implementációt a Spring generálja | |||
* kevesebb boilerplate kód | |||
|- | |||
|konvenciók | |||
használata | |||
|<syntaxhighlight lang="java" line="1"> | |||
List<Bus> findByLpn(String lpn); | |||
</syntaxhighlight> | |||
|- | |||
|rendezés | |||
és lapozás | |||
támogatása | |||
|<syntaxhighlight lang="java" line="1"> | |||
interface BusRepository extends PagingAndSortingRepository<Bus, Long> { | |||
Iterable<Bus> findAll(Sort sort); | |||
Page<Bus> findAll(Pageable pageable); | |||
} | |||
</syntaxhighlight> | |||
|- | |||
|egyedi | |||
lekérdezés | |||
|<syntaxhighlight lang="java" line="1">@Query("SELECT DISTINCT b FROM Bus b WHERE b.lpn LIKE :lpn")</syntaxhighlight> | |||
| | |||
* hosszú metódusnevek helyett kézzel meg lehet írni, és a kívánt nevet lehet adni a metódusnak | |||
|} | |||
* | |||
=== Hogyan valósíthatók meg entitások közti kapcsolatok és az entitások öröklése JPA-ban? === | === Hogyan valósíthatók meg entitások közti kapcsolatok és az entitások öröklése JPA-ban? === | ||
.. | |||
==== Kapcsolatok ==== | |||
{| class="wikitable mw-collapsible mw-collapsed" | |||
|+példa annotációkra | |||
!típus | |||
!egyirányú | |||
!kétirányú | |||
|- | |||
|<code>@OneToOne</code> | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Entity | |||
class A { | |||
@OneToOne | |||
@JoinColumn(name="b_id") | |||
B b; | |||
} | |||
@Entity | |||
class B { | |||
@Id | |||
Long id; | |||
} | |||
</syntaxhighlight> | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Entity | |||
class A { | |||
@OneToOne | |||
@JoinColumn(name="b_id") | |||
B b; | |||
} | |||
@Entity | |||
class B { | |||
@OneToOne(mappedBy="b") | |||
A a; | |||
} | |||
</syntaxhighlight> | |||
|- | |||
|<code>@OneToMany</code> | |||
és | |||
<code>@ManyToOne</code> | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Entity | |||
class A { | |||
@OneToMany(cascade=CascadeType.ALL) | |||
@JoinColumn(name="a_id") | |||
List<B> bs; | |||
} | |||
@Entity | |||
class B { | |||
@Id | |||
Long id; | |||
} | |||
</syntaxhighlight> | |||
|<syntaxhighlight lang="java" line="1">@Entity | |||
class A { | |||
@OneToMany( | |||
mappedBy="a", | |||
cascade=CascadeType.ALL, | |||
orphanRemoval=true | |||
) | |||
List<B> bs; | |||
} | |||
@Entity | |||
class B { | |||
@ManyToOne | |||
@JoinColumn(name="a_id") | |||
A a; | |||
}</syntaxhighlight> | |||
|- | |||
|<code>@ManyToMany</code> | |||
|<syntaxhighlight lang="java" line="1">@Entity | |||
class A { | |||
@ManyToMany | |||
@JoinTable( | |||
name="A_B", | |||
joinColumns= | |||
@JoinColumn(name="a_id"), | |||
inverseJoinColumns= | |||
@JoinColumn(name="b_id") | |||
) | |||
Set<B> bs; | |||
} | |||
@Entity | |||
class B { | |||
@Id | |||
Long id; | |||
}</syntaxhighlight> | |||
|<syntaxhighlight lang="java" line="1"> | |||
@Entity | |||
class A { | |||
@ManyToMany | |||
@JoinTable( | |||
name="A_B", | |||
joinColumns= | |||
@JoinColumn(name="a_id"), | |||
inverseJoinColumns= | |||
@JoinColumn(name="b_id") | |||
) | |||
Set<B> bs; | |||
} | |||
@Entity | |||
class B { | |||
@ManyToMany(mappedBy="bs") | |||
Set<A> as; | |||
} | |||
</syntaxhighlight> | |||
|} | |||
==== Öröklés ==== | |||
{| class="wikitable" | |||
|+típusai | |||
!módszer | |||
!<code>@Inheritance(strategy = …)</code> | |||
|- | |||
|[[Háttéralkalmazások/Záróvizsgatételek#Egy táblába, gányul|egy táblába, gányul]] | |||
|<code>SINGLE_TABLE</code> | |||
|- | |||
|[[Háttéralkalmazások/Záróvizsgatételek#Külön táblába a valós osztályokat|külön táblába a valós osztályokat]] | |||
|<code>TABLE_PER_CLASS</code> | |||
|- | |||
|[[Háttéralkalmazások/Záróvizsgatételek#Külön táblába az összes osztályt|külön táblába az összes osztályt]] | |||
|<code>JOINED</code> | |||
|- | |||
|[[Háttéralkalmazások/Záróvizsgatételek#Absztrakt struktúrába|absztrakt struktúrába]] | |||
|– | |||
|} | |||
* <code>@Id</code> attribútuma csak a legfelső ősnek lehet | |||
* absztrakt is lehet egy entitás | |||
** de természetesen nem lehet példányosítani | |||
* nem-entitásból is származhat entitás | |||
** ha szükségünk van az örökölt attribútumokra, akkor <code>@MappedSuperClass</code> annotációt kell tenni az ősre | |||
* entitásból is származhat nem-entitás | |||
** de nem "veszi kezelésbe" a JPA | |||
== 7. Spring == | == 7. Spring == | ||