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);
}
}