diff --git a/lesson-demo/pom.xml b/lesson-demo/pom.xml
index 80b50add..44b09aa4 100644
--- a/lesson-demo/pom.xml
+++ b/lesson-demo/pom.xml
@@ -11,4 +11,21 @@
lesson-demo
+
+
+ jakarta.persistence
+ jakarta.persistence-api
+ 3.1.0
+
+
+ org.hibernate
+ hibernate-core
+ 6.3.1.Final
+
+
+ org.postgresql
+ postgresql
+ 42.7.1
+
+
\ No newline at end of file
diff --git a/lesson-demo/src/main/java/com/bobocode/DemoApp.java b/lesson-demo/src/main/java/com/bobocode/DemoApp.java
index 21d5205b..faa0c07a 100644
--- a/lesson-demo/src/main/java/com/bobocode/DemoApp.java
+++ b/lesson-demo/src/main/java/com/bobocode/DemoApp.java
@@ -1,7 +1,55 @@
package com.bobocode;
+import com.bobocode.domain.Note;
+import com.bobocode.domain.Person;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+
+import java.util.function.Consumer;
+
public class DemoApp {
+ private static EntityManagerFactory emf;
public static void main(String[] args) {
+ emf = Persistence.createEntityManagerFactory("default");
+ var noteTitle = "A strange note 3";
+ doInTx(em ->{
+ var newNote = new Note();
+ newNote.setTitle(noteTitle);
+ newNote.setBody("I don't know who is my owner");
+
+ var mariana = em.find(Person.class, 230095);
+// newNote.setPerson(mariana);
+ mariana.getNotes().add(newNote);
+
+// var serhii = em.find(Person.class, 230096);
+// serhii.getNotes().add(newNote);
+// serhii.addNote(newNote);
+
+ });
+
+ doInTx(em -> {
+ var note = em.createQuery("select n from Note n where n.title = ?1", Note.class)
+ .setParameter(1, noteTitle)
+ .getSingleResult();
+// System.out.println(note.getPerson().getFirstName());
+ });
+ emf.close();
+ }
+
+ private static void doInTx(Consumer entityManagerConsumer) {
+ var em = emf.createEntityManager();
+ var tx = em.getTransaction();
+ try {
+ tx.begin();
+ entityManagerConsumer.accept(em);
+ tx.commit();
+ } catch (Exception e) {
+ tx.rollback();
+ throw e;
+ } finally {
+ em.close();
+ }
}
}
diff --git a/lesson-demo/src/main/java/com/bobocode/Task1DemoApp.java b/lesson-demo/src/main/java/com/bobocode/Task1DemoApp.java
new file mode 100644
index 00000000..aef440ca
--- /dev/null
+++ b/lesson-demo/src/main/java/com/bobocode/Task1DemoApp.java
@@ -0,0 +1,37 @@
+package com.bobocode;
+
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+
+import java.util.function.Consumer;
+
+public class Task1DemoApp {
+ private static EntityManagerFactory emf;
+
+ public static void main(String[] args) {
+ emf = Persistence.createEntityManagerFactory("default");
+
+ doInTx(em -> {
+
+ });
+
+
+ emf.close();
+ }
+
+ private static void doInTx(Consumer entityManagerConsumer) {
+ var em = emf.createEntityManager();
+ var tx = em.getTransaction();
+ try {
+ tx.begin();
+ entityManagerConsumer.accept(em);
+ tx.commit();
+ } catch (Exception e) {
+ tx.rollback();
+ throw e;
+ } finally {
+ em.close();
+ }
+ }
+}
diff --git a/lesson-demo/src/main/java/com/bobocode/domain/Note.java b/lesson-demo/src/main/java/com/bobocode/domain/Note.java
new file mode 100644
index 00000000..3812dada
--- /dev/null
+++ b/lesson-demo/src/main/java/com/bobocode/domain/Note.java
@@ -0,0 +1,32 @@
+package com.bobocode.domain;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+
+import java.time.LocalDateTime;
+
+import static jakarta.persistence.GenerationType.SEQUENCE;
+
+@Entity
+@Table(name = "notes")
+@Setter
+@Getter
+public class Note {
+ @Id
+ @GeneratedValue(strategy = SEQUENCE, generator = "note_id_seq_generator")
+ @SequenceGenerator(name = "note_id_seq_generator", sequenceName = "notes_id_seq", allocationSize = 1)
+ private Integer id;
+
+ private String title;
+
+ private String body;
+
+ @CreationTimestamp
+ private LocalDateTime createdOn;
+
+ @ManyToOne(optional = false)
+ @JoinColumn(name = "person_id")
+ private Person person;
+}
diff --git a/lesson-demo/src/main/java/com/bobocode/domain/Person.java b/lesson-demo/src/main/java/com/bobocode/domain/Person.java
new file mode 100644
index 00000000..ec8c2ebb
--- /dev/null
+++ b/lesson-demo/src/main/java/com/bobocode/domain/Person.java
@@ -0,0 +1,52 @@
+package com.bobocode.domain;
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.JdbcType;
+import org.hibernate.dialect.PostgreSQLEnumJdbcType;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import static jakarta.persistence.CascadeType.ALL;
+import static jakarta.persistence.GenerationType.SEQUENCE;
+
+@Entity
+@Table(name = "persons")
+@Setter
+@Getter
+public class Person {
+ @Id
+ @GeneratedValue(strategy = SEQUENCE, generator = "person_id_seq_generator")
+ @SequenceGenerator(name = "person_id_seq_generator", sequenceName = "persons_id_seq", allocationSize = 1)
+ private Integer id;
+
+ @Column(nullable = false)
+ private String firstName;
+
+ @Column(nullable = false)
+ private String lastName;
+
+ @Enumerated(EnumType.STRING)
+ @JdbcType(PostgreSQLEnumJdbcType.class)
+ private TeamType team;
+
+ @CreationTimestamp
+ private LocalDateTime createdOn;
+
+ @OneToMany(mappedBy = "person", cascade = ALL)
+ private List notes = new ArrayList<>();
+
+ public enum TeamType {
+ Petros, Hoverla, Blyznytsia, Breskul, Svydovets
+ }
+
+
+ public void addNote(Note note) {
+ note.setPerson(this);
+ notes.add(note);
+ }
+}
diff --git a/lesson-demo/src/main/resources/META-INF/persistence.xml b/lesson-demo/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 00000000..4e33ba96
--- /dev/null
+++ b/lesson-demo/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file