diff --git a/2021-05/spring-11-data-jpa/.gitignore b/2021-05/spring-11-data-jpa/.gitignore
new file mode 100644
index 00000000..e62c33c2
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+*.iml
+
+target/
diff --git a/2021-05/spring-11-data-jpa/pom.xml b/2021-05/spring-11-data-jpa/pom.xml
new file mode 100644
index 00000000..c8e0ebef
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-11-data-jpa
+ 1.0
+
+ pom
+
+
+ spring-11-exercise
+ spring-11-solution
+
+
diff --git a/2021-05/spring-11-data-jpa/spring-11-exercise/.gitignore b/2021-05/spring-11-data-jpa/spring-11-exercise/.gitignore
new file mode 100644
index 00000000..e62c33c2
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-exercise/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+*.iml
+
+target/
diff --git a/2021-05/spring-11-data-jpa/spring-11-exercise/pom.xml b/2021-05/spring-11-data-jpa/spring-11-exercise/pom.xml
new file mode 100644
index 00000000..3fbbfd94
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-exercise/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-11-exercise
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.5.1
+
+
+
+
+ 11
+ 11
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/Main.java b/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/Main.java
new file mode 100644
index 00000000..448cf757
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/Main.java
@@ -0,0 +1,24 @@
+package ru.otus.spring11;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+//import ru.otus.spring10.repostory.PersonRepository;
+
+import javax.annotation.PostConstruct;
+
+@SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
+@SpringBootApplication
+public class Main {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Main.class);
+ }
+
+// @Autowired
+// private PersonRepository repository;
+
+ @PostConstruct
+ public void init() {
+// repository.save(new Person("Pushkin"));
+ }
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/domain/Email.java b/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/domain/Email.java
new file mode 100644
index 00000000..c74bbb15
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/domain/Email.java
@@ -0,0 +1,20 @@
+package ru.otus.spring11.domain;
+
+public class Email {
+
+ private long id;
+
+ private String email;
+
+ public Email(String email) {
+ this.email = email;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/domain/Person.java b/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/domain/Person.java
new file mode 100644
index 00000000..165e92ed
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-exercise/src/main/java/ru/otus/spring11/domain/Person.java
@@ -0,0 +1,34 @@
+package ru.otus.spring11.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ @Id
+ @GeneratedValue
+ private long id;
+ private String name;
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/.gitignore b/2021-05/spring-11-data-jpa/spring-11-solution/.gitignore
new file mode 100644
index 00000000..e62c33c2
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/.gitignore
@@ -0,0 +1,4 @@
+.idea/
+*.iml
+
+target/
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/pom.xml b/2021-05/spring-11-data-jpa/spring-11-solution/pom.xml
new file mode 100644
index 00000000..6ae1df6c
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ ru.otus
+ spring-11-solution
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.1.RELEASE
+
+
+
+
+ 11
+ 11
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/Main.java b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/Main.java
new file mode 100644
index 00000000..1e82df6c
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/Main.java
@@ -0,0 +1,47 @@
+package ru.otus.spring11;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import ru.otus.spring11.domain.Email;
+import ru.otus.spring11.domain.Person;
+import ru.otus.spring11.repository.EmailRepository;
+import ru.otus.spring11.repository.PersonRepository;
+
+import javax.annotation.PostConstruct;
+
+@SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
+@SpringBootApplication
+public class Main {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Main.class);
+ }
+
+ @Autowired
+ private PersonRepository repository;
+
+ @Autowired
+ private EmailRepository emailRepository;
+
+ @PostConstruct
+ public void init() {
+ Email emailP = new Email("alex@pushkin.ru");
+ emailRepository.save(emailP);
+ Email emailL = new Email("michail@lermontov.ru");
+ emailRepository.save(emailL);
+
+ repository.save(new Person("Pushkin", emailP));
+ repository.save(new Person("Lermontov",emailL));
+
+ System.out.println("--------");
+ System.out.println(repository.findByName("Pushkin"));
+ System.out.println("--------");
+ System.out.println(emailRepository.findAll());
+ System.out.println("--------");
+ System.out.println(emailRepository.findByEmail("alex@pushkin.ru"));
+ System.out.println("--------");
+ System.out.println(repository.findByEmail_Email("alex@pushkin.ru"));
+ System.out.println("--------");
+ }
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/domain/Email.java b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/domain/Email.java
new file mode 100644
index 00000000..150e2f2e
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/domain/Email.java
@@ -0,0 +1,38 @@
+package ru.otus.spring11.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Email {
+
+ @Id
+ @GeneratedValue
+ private long id;
+
+ private String email;
+
+ public Email() {
+ }
+
+ @Override
+ public String toString() {
+ return "Email{" +
+ "id=" + id +
+ ", email='" + email + '\'' +
+ '}';
+ }
+
+ public Email(String email) {
+ this.email = email;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/domain/Person.java b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/domain/Person.java
new file mode 100644
index 00000000..ecc0fa3c
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/domain/Person.java
@@ -0,0 +1,55 @@
+package ru.otus.spring11.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+
+@Entity
+public class Person {
+
+ @Id
+ @GeneratedValue
+ private long id;
+
+ private String name;
+
+ @OneToOne(targetEntity = Email.class)
+ private Email email;
+
+ public Person(String name, Email email) {
+ this.name = name;
+ this.email = email;
+ }
+
+ public Person() {
+ }
+
+ @Override
+ public String toString() {
+ return "Person{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ '}';
+ }
+
+ public Person(String name) {
+ this.name = name;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/repository/EmailRepository.java b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/repository/EmailRepository.java
new file mode 100644
index 00000000..9bda9328
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/repository/EmailRepository.java
@@ -0,0 +1,16 @@
+package ru.otus.spring11.repository;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import ru.otus.spring11.domain.Email;
+
+import java.util.List;
+
+public interface EmailRepository extends JpaRepository {
+
+ List findAll();
+
+ @Query("select e from Email e where e.email = :email")
+ Email findByEmail(@Param("email") String email);
+}
diff --git a/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/repository/PersonRepository.java b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/repository/PersonRepository.java
new file mode 100644
index 00000000..aab1a0c5
--- /dev/null
+++ b/2021-05/spring-11-data-jpa/spring-11-solution/src/main/java/ru/otus/spring11/repository/PersonRepository.java
@@ -0,0 +1,15 @@
+package ru.otus.spring11.repository;
+
+import org.springframework.data.repository.CrudRepository;
+import ru.otus.spring11.domain.Person;
+
+import java.util.List;
+
+public interface PersonRepository extends CrudRepository {
+
+ List findAll();
+
+ Person findByName(String s);
+
+ Person findByEmail_Email(String email);
+}