From 47dd89a6951f6e0f7de6947643ef7bfc2d1fe3e4 Mon Sep 17 00:00:00 2001 From: stvort Date: Sat, 17 Jul 2021 03:00:43 +0400 Subject: [PATCH] readonly-transaction-demo example updated --- .../main/java/ru/otus/demo/model/Email.java | 22 +++++++++++++++++++ .../main/java/ru/otus/demo/model/Person.java | 8 +++---- .../demo/repository/PersonRepositoryJpa.java | 2 +- .../ru/otus/demo/services/PersonService.java | 5 +++++ .../src/main/resources/schema.sql | 10 +++++++++ .../otus/demo/services/PersonServiceTest.java | 10 ++++++++- 6 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Email.java diff --git a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Email.java b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Email.java new file mode 100644 index 00000000..42bbfac5 --- /dev/null +++ b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Email.java @@ -0,0 +1,22 @@ +package ru.otus.demo.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +public class Email { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + private String address; +} diff --git a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Person.java b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Person.java index 95729249..58fbdf28 100644 --- a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Person.java +++ b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/model/Person.java @@ -4,10 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import javax.persistence.*; @Data @NoArgsConstructor @@ -20,4 +17,7 @@ public class Person { private String name; + @OneToOne(cascade = CascadeType.ALL) + private Email email; + } diff --git a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/repository/PersonRepositoryJpa.java b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/repository/PersonRepositoryJpa.java index 3e97d85d..fc699a67 100644 --- a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/repository/PersonRepositoryJpa.java +++ b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/repository/PersonRepositoryJpa.java @@ -19,7 +19,7 @@ public class PersonRepositoryJpa implements PersonRepository { @Override public Person save(Person person) { if (person.getId() == 0) { - Person savedPerson = new Person(person.getId(), person.getName()); + Person savedPerson = new Person(person.getId(), person.getName(), person.getEmail()); em.persist(savedPerson); return savedPerson; diff --git a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/services/PersonService.java b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/services/PersonService.java index cc672d1b..74629595 100644 --- a/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/services/PersonService.java +++ b/examples/readonly-transaction-demo/src/main/java/ru/otus/demo/services/PersonService.java @@ -22,6 +22,11 @@ public class PersonService { personRepository.save(person); } + public void updateWithoutTran(long id, String name) { + Person person = personRepository.findById(id); + person.setName(name); + } + @Transactional public void updateWithNormalTran(long id, String name) { Person person = personRepository.findById(id); diff --git a/examples/readonly-transaction-demo/src/main/resources/schema.sql b/examples/readonly-transaction-demo/src/main/resources/schema.sql index 0b626688..7a9fc3c4 100644 --- a/examples/readonly-transaction-demo/src/main/resources/schema.sql +++ b/examples/readonly-transaction-demo/src/main/resources/schema.sql @@ -1,7 +1,17 @@ drop table if exists person; +drop table if exists email; + + +create table email ( + id bigserial, + address varchar(200), + primary key(id) +); create table person ( id bigserial, + email_id bigint references email(id), name varchar(200), primary key(id) ); + diff --git a/examples/readonly-transaction-demo/src/test/java/ru/otus/demo/services/PersonServiceTest.java b/examples/readonly-transaction-demo/src/test/java/ru/otus/demo/services/PersonServiceTest.java index 1814dc28..1069ea0a 100644 --- a/examples/readonly-transaction-demo/src/test/java/ru/otus/demo/services/PersonServiceTest.java +++ b/examples/readonly-transaction-demo/src/test/java/ru/otus/demo/services/PersonServiceTest.java @@ -8,6 +8,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import ru.otus.demo.model.Email; import ru.otus.demo.model.Person; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -23,7 +24,7 @@ class PersonServiceTest { @BeforeEach void setUp() { - personService.save(new Person(0, "Igor")); + personService.save(new Person(0, "Igor", new Email(0, "noname@nomail.ru"))); } @Test @@ -39,4 +40,11 @@ class PersonServiceTest { Person actualPerson = personService.findById(1); assertThat(actualPerson).extracting(Person::getName).isEqualTo("Igor"); } + + @Test + void updateWithoutTran() { + personService.updateWithoutTran(1, "Vasya"); + Person actualPerson = personService.findById(1); + assertThat(actualPerson).extracting(Person::getName).isEqualTo("Igor"); + } } \ No newline at end of file