JPA Repository Examples

  

Example 1: One-to-One Relationship

Scenario: Managing a one-to-one relationship between Person and Passport.

Entities: Person and Passport

Person.java


import javax.persistence.*; @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToOne(mappedBy = "person", cascade = CascadeType.ALL) private Passport passport; // Constructors, getters, setters }

Passport.java


import javax.persistence.*; @Entity public class Passport { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String number; @OneToOne @JoinColumn(name = "person_id") private Person person; // Constructors, getters, setters }

PersonRepository.java


import org.springframework.data.jpa.repository.JpaRepository; public interface PersonRepository extends JpaRepository<Person, Long> { }

Usage in Application:


@Service public class PersonService { @Autowired private PersonRepository personRepository; @Transactional public void savePersonWithPassport() { Person person = new Person("John"); Passport passport = new Passport("ABC123"); person.setPassport(passport); passport.setPerson(person); personRepository.save(person); } }

Example 2: One-to-Many Relationship

Scenario: Managing a one-to-many relationship between Author and Book.

Entities: Author and Book

Author.java


import javax.persistence.*; import java.util.List; @Entity public class Author { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "author", cascade = CascadeType.ALL) private List<Book> books; // Constructors, getters, setters }

Book.java


import javax.persistence.*; @Entity public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @ManyToOne @JoinColumn(name = "author_id") private Author author; // Constructors, getters, setters }

AuthorRepository.java


import org.springframework.data.jpa.repository.JpaRepository; public interface AuthorRepository extends JpaRepository<Author, Long> { }

Usage in Application:


@Service public class AuthorService { @Autowired private AuthorRepository authorRepository; @Transactional public void saveAuthorWithBooks() { Author author = new Author("Jane Austen"); Book book1 = new Book("Pride and Prejudice"); Book book2 = new Book("Sense and Sensibility"); author.getBooks().add(book1); author.getBooks().add(book2); book1.setAuthor(author); book2.setAuthor(author); authorRepository.save(author); } }

Example 3: Many-to-Many Relationship

Scenario: Managing a many-to-many relationship between Student and Course.

Entities: Student and Course

Student.java


import javax.persistence.*; import java.util.List; @Entity public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany @JoinTable(name = "student_course", joinColumns = @JoinColumn(name = "student_id"), inverseJoinColumns = @JoinColumn(name = "course_id")) private List<Course> courses; // Constructors, getters, setters }

Course.java


import javax.persistence.*; import java.util.List; @Entity public class Course { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany(mappedBy = "courses") private List<Student> students; // Constructors, getters, setters }

StudentRepository.java


import org.springframework.data.jpa.repository.JpaRepository; public interface StudentRepository extends JpaRepository<Student, Long> { }

Usage in Application:


@Service public class StudentService { @Autowired private StudentRepository studentRepository; @Transactional public void enrollStudentsInCourses() { Student student1 = new Student("John"); Student student2 = new Student("Jane"); Course course1 = new Course("Java Programming"); Course course2 = new Course("Database Management"); student1.getCourses().add(course1); student1.getCourses().add(course2); student2.getCourses().add(course1); course1.getStudents().add(student1); course1.getStudents().add(student2); course2.getStudents().add(student1); studentRepository.save(student1); studentRepository.save(student2); } }

Example 4: Many-to-One Relationship

Scenario: Managing a many-to-one relationship between Order and Customer.

Entities: Order and Customer

Order.java


import javax.persistence.*; @Entity public class Order { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String orderNumber; @ManyToOne @JoinColumn(name = "customer_id") private Customer customer; // Constructors, getters, setters }

Customer.java


import javax.persistence.*; import java.util.List; @Entity public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL) private List<Order> orders; // Constructors, getters, setters }

OrderRepository.java


import org.springframework.data.jpa.repository.JpaRepository; public interface OrderRepository extends JpaRepository<Order, Long> { }

Usage in Application:


@Service public class OrderService { @Autowired private OrderRepository orderRepository; @Transactional public void createOrderForCustomer() { Customer customer = new Customer("John Doe"); Order order1 = new Order("ORD001"); Order order2 = new Order("ORD002"); order1.setCustomer(customer); order2.setCustomer(customer); customer.getOrders().add(order1); customer.getOrders().add(order2); orderRepository.save(order1); orderRepository.save(order2); } }


Daily Knowledge Journey: A Quest for Learning

Object Class

 The Object class in Java is the root of the class hierarchy and serves as the superclass for all other classes. It provides fundamental me...