„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 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 | === 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 == | ||