„Háttéralkalmazások/Záróvizsgatételek” változatai közötti eltérés

4. EF: Tétel kidolgozása
5. JPA – általános: Tétel kidolgozása
65. sor: 65. sor:
=== Ismertesse az adatbázisok szerveroldali programozásának koncepcióját, előnyeit, hátrányait! ===
=== Ismertesse az adatbázisok szerveroldali programozásának koncepcióját, előnyeit, hátrányait! ===
Használatával eljárásokat (procedures) és függvényeket (functions), illetve triggereket lehet tárolni az adatbázisban. Lényege, hogy az üzleti logika helyett maga az adatbázis-kezelő szerver ''futtatja'' a beállított szubrutinokat, az előbbi csak ''meghívja'' őket.
Használatával eljárásokat (procedures) és függvényeket (functions), illetve triggereket lehet tárolni az adatbázisban. Lényege, hogy az üzleti logika helyett maga az adatbázis-kezelő szerver ''futtatja'' a beállított szubrutinokat, az előbbi csak ''meghívja'' őket.
{| class="wikitable"
{| class="wikitable mw-collapsible mw-collapsed"
|+a szerveroldali programozás jellemzői
|+a szerveroldali programozás jellemzői
!szempont / tulajdonság
!szempont / tulajdonság
371. sor: 371. sor:


=== Mi az Entity Framework? ===
=== Mi az Entity Framework? ===
Az Entity Framework az ADO.NET-re és a .NET Frameworkre épülő ORM-keretrendszer. A 2016-ban kiadott, .NET Core-alapon újraírt, nyílt forráskódú verzió neve ''Entity Framework '''Core'''''.
Az Entity Framework egy Microsoft által fejlesztett, ADO.NET-re és .NET Frameworkre épülő ORM-keretrendszer. A 2016-ban kiadott, .NET Core-alapon újraírt, nyílt forráskódú verzió neve ''Entity Framework '''Core'''''. A Java nyelvbeli megfelelője a ''[[Háttéralkalmazások/Záróvizsgatételek#5. JPA – általános|Jakarta Persistence]]''.


Teljesen moduláris, az egyes részeit NuGet-csomagokból lehet importálni. A JDBC-hez hasonlóan drivereket biztosít az egyes RDBMS-ekhez. Az ORM mellett a LINQ-eket futásidőben SQL-kódra fordítja le és hajtja végre.
Teljesen moduláris, az egyes részeit NuGet-csomagokból lehet importálni. A JDBC-hez hasonlóan drivereket biztosít az egyes RDBMS-ekhez. Az ORM mellett a LINQ-eket futásidőben SQL-kódra fordítja le és hajtja végre.
402. sor: 402. sor:


=== Milyen három modellezési lehetőségünk van adatmodell készítésére? ===
=== Milyen három modellezési lehetőségünk van adatmodell készítésére? ===
{| class="wikitable"
{| class="wikitable mw-collapsible mw-collapsed"
!
!
!példa
!példa
488. sor: 488. sor:


=== Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük? ===
=== Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük? ===
{| class="wikitable"
{| class="wikitable mw-collapsible mw-collapsed"
!
!
!1:N
!1:N
665. sor: 665. sor:


=== Ismertesd a Java Persistence API architektúráját és főbb jellemzőit! ===
=== Ismertesd a Java Persistence API architektúráját és főbb jellemzőit! ===
...
A JPA egy Java ORM-interfészspecifikáció, melyet az Eclipse Foundation tart karban. 2020 óta már ''Jakarta Persistence'' a neve.<ref>https://blogs.oracle.com/javamagazine/post/transition-from-java-ee-to-jakarta-ee</ref>
 
Egyik implementációja a ''Hibernate'', .NET-es megfelelője pedig a ''.NET Persistence API''.
 
==== Architektúra ====
<syntaxhighlight>
┌──────────────────────────┐
│ 1. osztályok (entitások) │  ← annotációkkal ellátva
└──────────────────────────┘
          ↓
┌─────────────────────────────┐
│ 2. perzisztenciabeállítások │  ← a persistence.xml-ben vagy a kódban
└─────────────────────────────┘
          ↓
┌─────────────────────────┐
│ 3. EntityManagerFactory │  ← elindítja a JPA providert
└─────────────────────────┘
          ↓
┌──────────────────┐
│ 4. EntityManager │  ← futásidőben kezeli a perzisztenciakontextust (tranzakciókat, gyorsítótárat stb.)
└──────────────────┘
          ↓
┌───────────────────┐
│ 5. adatbázisréteg │ 
│  - JDBC API      │ 
│  - JDBC driver  │ 
│  - RDBMS        │
└───────────────────┘
</syntaxhighlight>Az elsőt "csak" használja a JPA, a 2–4. elemek pedig a szerves részei.
 
=== Milyen annotációkat kell alkalmazni egy JPA-entitás megírásakor? ===
 
* <code>@Entity</code>
* <code>@Id</code>
 
Szükség esetén:
 
* <code>@GeneratedValue</code> az <code>@Id</code>-hoz
 
* <code>@Table(name=…)</code>, illetve <code>@Column(name=…)</code>
* <code>@Embeddable</code> és <code>@Embedded</code>
* <code>@Convert(converter=…)</code>


=== Milyen annotációkat kell alkalmazni egy JPA-entitás megírásakor, és milyen típusú attribútumokat vehetünk fel benne? ===
=== Milyen típusú attribútumokat vehetünk fel benne? ===
...
 
* primitívek és ''TitleCase'' wrappereik
* szövegek
** <code>String</code>
** <code>char[]</code> és <code>Character[]</code>
* számok
** <code>BigInteger</code> és <code>BigDecimal</code>
* idő
** <code>Calendar</code>, <code>Date</code>, <code>Time</code>, <code>Timestamp</code> stb.
*** <code>java.util.*</code> esetén kötelező használni a <code>@Temporal(DATE/TIME/TIMESTAMP)</code>-et
*** egyéb esetben ajánlott
* Enum
** <code>@Enumerated(ORDINAL/STRING)</code> szükséges
* nyers adatok
** <code>byte[]</code> és <code>Byte[]</code>
** nagyobb adatok esetén <code>@Lob</code> szükséges, hogy <code>BLOB</code>-ként tárolja őket


=== Ismertesd a perzisztenciakontextus fogalmát! ===
=== Ismertesd a perzisztenciakontextus fogalmát! ===
...
A perzisztenciakontextus a perzisztenciaszolgáltató által kezelt, memóriabeli entitások egy része. Hozzáférést biztosít az adatbázishoz az üzleti logikában. A JPA-ban az <code>EntityManager</code>, az EF Core-ban pedig a <code>DbContext</code> végzi ezt a feladatot.
 
Egy perzisztenciakontextus belül egy objektum csak egyetlen példányban létezhet.


=== Mutasd be az entitások életciklusát! ===
=== Mutasd be az entitások életciklusát! ===
...
{| class="wikitable"
|+állapotok
! colspan="2" rowspan="2" |
! colspan="2" |a DB-ben
|-
|nem létezik
|létezik
|-
| rowspan="2" |a memóriában (perzisztenciakontextusban)
|nem létezik
|–
|''detached''
|-
|létezik
|''new''
|''managed'' vagy ''removed''
|}


== 6. JPA – használat ==
== 6. JPA – használat ==