diff --git a/pom.xml b/pom.xml
index 8f66f1179c1ba96b291bf37c7346420ad46d199e..cd4143e395a16392aff997098fb3123119b49301 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,19 @@
 	</properties>
 	<dependencies>
 	
+		<!-- https://mvnrepository.com/artifact/jakarta.persistence/jakarta.persistence-api -->
+		<dependency>
+			<groupId>jakarta.persistence</groupId>
+			<artifactId>jakarta.persistence-api</artifactId>
+			<version>3.2.0</version>
+		</dependency>
+
+		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-core</artifactId>
+			<version>6.6.11.Final</version>
+		</dependency>
 		<dependency>
 			<groupId>org.projectlombok</groupId>
 			<artifactId>lombok</artifactId>
@@ -23,16 +36,14 @@
 			<scope>provided</scope>
 		</dependency>
 
-		<!--
-		https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
+		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
 		<dependency>
 			<groupId>org.apache.logging.log4j</groupId>
 			<artifactId>log4j-core</artifactId>
 			<version>2.24.3</version>
 		</dependency>
 
-		<!--
-		https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
+		<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
 		<dependency>
 			<groupId>org.apache.logging.log4j</groupId>
 			<artifactId>log4j-api</artifactId>
diff --git a/src/main/java/lab/data/Score.java b/src/main/java/lab/data/Score.java
index 435a6c2559cfa5925cad211374cdcd656a1f104b..2be798381f3f0f0634acc64df29fa574b38e4ee7 100644
--- a/src/main/java/lab/data/Score.java
+++ b/src/main/java/lab/data/Score.java
@@ -2,16 +2,25 @@ package lab.data;
 
 import java.util.Random;
 
+import jakarta.persistence.Entity;
+import jakarta.persistence.EnumType;
+import jakarta.persistence.Enumerated;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.ToString;
 
+@Entity
 @Getter
 @Setter
 @AllArgsConstructor
+@NoArgsConstructor
 @EqualsAndHashCode
 @ToString
 @Builder(toBuilder = true)
@@ -19,9 +28,12 @@ public class Score {
 
 	private static final Random RANDOM = new Random();
 	
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
 	private Long id;
 	private String name;
 	private int points;
+	@Enumerated(EnumType.STRING)
 	private Level level;
 	
 	
diff --git a/src/main/java/lab/storage/JpaConnector.java b/src/main/java/lab/storage/JpaConnector.java
index b1f5bf10a6129abf829d8a7283603076b76a2e7d..3dc74583703c73a1a552dd522a7d347cc89a8a08 100644
--- a/src/main/java/lab/storage/JpaConnector.java
+++ b/src/main/java/lab/storage/JpaConnector.java
@@ -1,25 +1,32 @@
 package lab.storage;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.function.Consumer;
 
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
 import lab.data.Score;
 
 public class JpaConnector implements ScoreStorageInterface {
 
+	private EntityManagerFactory emf;
+	private EntityManager em;
 
 	public JpaConnector() {
+		emf = Persistence.createEntityManagerFactory("java2");
+		em = emf.createEntityManager();
 	}
 
 	@Override
 	public List<Score> getAll() {
-		return Collections.emptyList();
+		return em.createQuery("select s from Score s", Score.class).getResultList();
 	}
 
 	@Override
 	public List<Score> getFirstTen() {
-		return Collections.emptyList();
+		return em.createQuery("select s from Score s order by s.points DESC", Score.class).setMaxResults(10)
+				.getResultList();
 	}
 
 	@Override
@@ -28,27 +35,47 @@ public class JpaConnector implements ScoreStorageInterface {
 
 	@Override
 	public Score save(Score score) {
-		return null;
+		Score result;
+		em.getTransaction().begin();
+		if (score.getId() == null || score.getId() == 0) {
+			em.persist(score);
+			result = score;
+		} else {
+			result = em.merge(score);
+		}
+		em.getTransaction().commit();
+		return result;
 	}
 
 	@Override
 	public void delete(List<Score> scores) {
+		em.getTransaction().begin();
+		for (Score score : scores) {
+			em.remove(score);
+		}
+		em.getTransaction().commit();
 	}
 
 	@Override
 	public void stop() {
+		em.close();
+		emf.close();
 	}
 
 	public Object getEntityManager() {
 		//return entity manager. Type Object is there because of compilation of empty task assignment
-		return null;
+		return em;
 	}
 
 	public Score find(long id) {
-		return null;
+		return em.find(Score.class, id);
 	}
 	
 	public void modifyNoPersistOrMerge(long id, Consumer<Score> motificator) {
+		em.getTransaction().begin();
+		Score score = em.find(Score.class, id);
+		motificator.accept(score);
+		em.getTransaction().commit();
 	}
 	
 }
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index d40f0a8b9eb3c4f95d9d8dc2e394aa50af043b3e..fb40c0131622735321624afd1208812cd2519922 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -5,10 +5,12 @@ module cz.vsb.fei.java2.lab05_module {
 	requires java.sql;
 	requires org.apache.logging.log4j;
 	requires static lombok;
+	requires jakarta.persistence;
 	requires com.h2database;
+	requires org.hibernate.orm.core;
 	
 	opens lab.gui to javafx.fxml;
-	opens lab.data to javafx.base;
+	opens lab.data;
 
 	exports lab.gui to javafx.fxml, javafx.graphics;
 }
\ No newline at end of file
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a6bb5893f6a381403ffae95e2e83faf208ba3f4d
--- /dev/null
+++ b/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence version="3.0"
+	xmlns="https://jakarta.ee/xml/ns/persistence"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="
+        https://jakarta.ee/xml/ns/persistence
+        https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
+	<persistence-unit name="java2"
+		transaction-type="RESOURCE_LOCAL">
+
+		<!-- If you are running in a production environment, add a managed data 
+			source, this example data source is just for development and testing! -->
+		<properties>
+			<property name="jakarta.persistence.jdbc.url"
+				value="jdbc:h2:file:./db/java2" />
+			<!-- In memory DB no store to disk
+				<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:mem:java2" />
+			-->
+			<property name="jakarta.persistence.jdbc.driver"
+				value="org.h2.Driver" />
+
+
+			<property name="jakarta.persistence.jdbc.user" value="app" />
+			<property name="jakarta.persistence.jdbc.password"
+				value="app" />
+			<property
+				name="jakarta.persistence.schema-generation.database.action"
+				value="create"></property>
+
+			<!-- Properties for Hibernate -->
+			<property name="hibernate.show_sql" value="false" />
+			<property name="hibernate.format_sql" value="true" />
+			<!--
+				<property name="hibernate.hbm2ddl.auto" value="update" />
+			-->
+
+		</properties>
+	</persistence-unit>
+
+</persistence>
+