@Test public void testJPALockScope() { doInJPA( this::entityManagerFactory, entityManager -> { Person person = new Person("John Doe"); entityManager.persist(person); Phone home = new Phone("123-456-7890"); Phone office = new Phone("098-765-4321"); person.getPhones().add(home); person.getPhones().add(office); entityManager.persist(person); }); doInJPA( this::entityManagerFactory, entityManager -> { log.info("testJPALockScope"); Long id = 1L; // tag::locking-jpa-query-hints-scope-example[] Person person = entityManager.find( Person.class, id, LockModeType.PESSIMISTIC_WRITE, Collections.singletonMap( "javax.persistence.lock.scope", PessimisticLockScope.EXTENDED)); // end::locking-jpa-query-hints-scope-example[] assertEquals(2, person.getPhones().size()); }); }
@Test public void testLifecycle() { doInJPA( this::entityManagerFactory, entityManager -> { Person person = new Person(1L); entityManager.persist(person); person.addPhone(new Phone(1L, "landline", "028-234-9876")); person.addPhone(new Phone(2L, "mobile", "072-122-9876")); }); doInJPA( this::entityManagerFactory, entityManager -> { Person person = entityManager.find(Person.class, 1L); Set<Phone> phones = person.getPhones(); Assert.assertEquals(2, phones.size()); phones.stream().forEach(phone -> log.infov("Phone number %s", phone.getNumber())); person.removePhone(phones.iterator().next()); Assert.assertEquals(1, phones.size()); }); doInJPA( this::entityManagerFactory, entityManager -> { Person person = entityManager.find(Person.class, 1L); Set<Phone> phones = person.getPhones(); Assert.assertEquals(1, phones.size()); }); }
/** * Tests to {@link EntityManager#find(Class, Object)} person. * * @since $version * @author hceylan */ @Test public void testFind() { final Person person = this.person(); this.persist(person); this.commit(); this.close(); final Person person2 = this.find(Person.class, person.getId()); Assert.assertEquals(person.getName(), person2.getName()); Assert.assertEquals(person.getPhones().size(), person2.getPhones().size()); }
public static List<String> getPhonesFromPersonName(String personName) throws NotExistsPersonException { Person person = getPersonFromIdentifier(personName); List<Phone> phones = person.getPhones(); List<String> result = new ArrayList<String>(); for (Phone phone : phones) { result.add(phone.getPhone()); } return result; }
@Test public void testBuildLockRequest() { doInJPA( this::entityManagerFactory, entityManager -> { log.info("testBuildLockRequest"); Person person = new Person("John Doe"); Phone home = new Phone("123-456-7890"); Phone office = new Phone("098-765-4321"); person.getPhones().add(home); person.getPhones().add(office); entityManager.persist(person); entityManager.flush(); }); doInJPA( this::entityManagerFactory, entityManager -> { Long id = 1L; // tag::locking-buildLockRequest-example[] Person person = entityManager.find(Person.class, id); Session session = entityManager.unwrap(Session.class); session .buildLockRequest(LockOptions.NONE) .setLockMode(LockMode.PESSIMISTIC_READ) .setTimeOut(LockOptions.NO_WAIT) .lock(person); // end::locking-buildLockRequest-example[] }); doInJPA( this::entityManagerFactory, entityManager -> { Long id = 1L; // tag::locking-buildLockRequest-scope-example[] Person person = entityManager.find(Person.class, id); Session session = entityManager.unwrap(Session.class); session .buildLockRequest(LockOptions.NONE) .setLockMode(LockMode.PESSIMISTIC_READ) .setTimeOut(LockOptions.NO_WAIT) .setScope(true) .lock(person); // end::locking-buildLockRequest-scope-example[] }); }
@Test public void testLifecycle() { doInJPA( this::entityManagerFactory, entityManager -> { Person person = new Person(1L); entityManager.persist(person); person.addPhone(new Phone(1L, "landline", "028-234-9876")); person.addPhone(new Phone(2L, "mobile", "072-122-9876")); entityManager.flush(); person.removePhone(person.getPhones().get(0)); }); doInJPA( this::entityManagerFactory, entityManager -> { entityManager.find(Person.class, 1L).getPhones().size(); }); }