„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
!nem létezik
|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 ==