5. JPA Basics
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@Version
Long version;
String firstName;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
Address address;
@ManyToMany(cascade = CascadeType.ALL)
Set<Hobby> hobbies = new HashSet<>();
Gender gender;
}
6. JPA Basics
Person p = createPerson();
em.persist(p);
// select count(*) from Person
Person reloaded = em.find(Person.class, p.getId());
// select count(*) from Person
Person reloadedAgain = em
.createQuery("SELECT p FROM Person p " +
"WHERE p.id = :id", Person.class)
.setParameter("id", p.getId())
.getSingleResult();
// select count(*) from Person
7. JPA Basics
@Transactional
public class PersonService {
@Autowired
EntityManager em;
public void setName(Long id, String name) {
em.find(Person.class, id).setFirstName(name);
}
public Person loadPerson(Long id) {
return em.find(Person.class, id);
}
}
8. JPA Basics
Person person = personService.loadPerson(id);
person.getAddress();
person.getHobbies().forEach(System.out::println);
28. Query by Example
Person pattern = new Person(
null,
new Address(null, null, "germany"),
Gender.MALE,
null
);
Example<Person> strict = Example.of(pattern);
persons.findAll(strict);
29. Query by Example
Example<Person> lenient = Example.of(
pattern,
ExampleMatcher.matchingAll().withIgnoreCase()
);
persons.findAll(lenient);
38. References
! Github: https://github.com/spring-projects/spring-data-jpa
! Reference: https://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/
! Official examples: https://github.com/spring-projects/spring-data-examples/tree/
master/jpa
! Examples for these slides: https://github.com/schauder/talk-spring-data-jpa-0-100/
tree/master/example
! Article about specifications and Querydsl with Spring Data JPA: https://spring.io/blog/
2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
39. Jens Schauder
! Spring Data JPA
! Spring Data JDBC
! jschauder@pivotal.io
! Father
! Plays (Roleplaying) Games
! Fitness & Sports
! @jensschauder
! blog.schauderhaft.de