Rumah  >  Artikel  >  Java  >  Memahami Pemetaan JPA dalam Spring Boot: Hubungan Satu-dengan-Satu, Satu-ke-Ramai, Banyak-ke-Satu dan Banyak-ke-Ramai

Memahami Pemetaan JPA dalam Spring Boot: Hubungan Satu-dengan-Satu, Satu-ke-Ramai, Banyak-ke-Satu dan Banyak-ke-Ramai

WBOY
WBOYasal
2024-08-13 16:39:56630semak imbas

Understanding JPA Mappings in Spring Boot: One-to-One, One-to-Many, Many-to-One, and Many-to-Many Relationships

Apabila membina aplikasi dengan Spring Boot dan JPA (Java Persistence API), mengurus perhubungan antara entiti adalah penting. Memahami cara memetakan perhubungan ini dengan berkesan akan membantu anda memodelkan data anda dengan tepat dan melaksanakan pertanyaan yang cekap. Dalam panduan ini, kami akan meneroka pelbagai jenis pemetaan JPA yang disokong oleh Spring Boot: satu-ke-satu, satu-ke-banyak, banyak-ke-satu dan banyak-ke-banyak. Akan memberikan contoh pada pemetaan satu arah dan dua arah.

Hubungan Satu dengan Satu

Satu arah Satu-dengan-Satu

Dalam perhubungan satu-dengan-satu satu arah, satu entiti merujuk yang lain tanpa entiti kedua mengetahui tentang yang pertama.

Contoh:

// User.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Data
@Entity
public class User {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String username;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "fk_profile_id", referencedColumnName = "id")
    private Profile profile;

}

// Profile.java
import javax.persistence.Entity;
import javax.persistence.Id;

@Data
@Entity
public class Profile {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String bio;
}

Dwiarah Satu-dengan-Satu

Dalam hubungan satu dengan satu dua hala, kedua-dua entiti merujuk antara satu sama lain.

Contoh:

// User.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Data
@Entity
public class User {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String username;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private Profile profile;

}

// Profile.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.JoinColumn;

@Data
@Entity
public class Profile {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String bio;

    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
}


Hubungan Satu-dengan-Banyak

Satu arah Satu-ke-Banyak

Dalam perhubungan satu-ke-banyak satu arah, satu entiti merujuk koleksi entiti lain.

Contoh:

// Author.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.List;

@Entity
@Data
public class Author {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "fk_book_id", referencedColumnName = "id")
    private List<Book> books;
}

// Book.java
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Data
public class Book {
    @Id
    private Long id;
    private String title;
}

Dwiarah Satu-ke-Banyak

Dalam hubungan satu-ke-banyak dua hala, kedua-dua entiti dirujuk antara satu sama lain.

Contoh:

// Author.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import java.util.List;

@Entity
@Data
public class Author {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String name;

    @OneToMany(mappedBy = "author", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Book> books;

}

// Book.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
@Data
public class Book {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String title;

    @ManyToOne(name = "fk_author_id", referencedColumnName = "id")
    private Author author;
}

Hubungan Ramai-dengan-Satu

Satu Arah Banyak-ke-Satu

Dalam perhubungan banyak-dengan-satu satu arah, berbilang entiti merujuk kepada satu entiti.

Contoh:

// Order.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
@Data
public class Order {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String description;

    @ManyToOne
    private Customer customer;

}

// Customer.java
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
@Data
public class Customer {

    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String name;

}

Dwiarah Banyak-ke-Satu

Dalam hubungan banyak-dengan-satu dua hala, entiti yang dirujuk mempunyai koleksi entiti yang merujuk.

Contoh:

// Order.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
@Data
public class Order {

    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String description;

    @ManyToOne
    private Customer customer;

}

// Customer.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import java.util.List;

@Entity
@Data
public class Customer {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String name;

    @OneToMany(mappedBy = "customer")
    private List<Order> orders;

}

Hubungan Ramai dengan Ramai

Satu Arah Banyak-ke-Banyak

Dalam perhubungan banyak-ke-banyak satu arah, setiap entiti mempunyai koleksi yang lain, tetapi hubungan itu tidak diuruskan secara eksplisit oleh mana-mana pihak.

Contoh:

// Student.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
@Data
public class Student {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String name;

    @ManyToMany
    private Set<Course> courses;

}

// Course.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
@Data
public class Course {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String title;

    @ManyToMany
    private Set<Student> students;
}

Dwiarah Banyak-ke-Banyak

Dalam hubungan banyak-ke-banyak dua hala, kedua-dua entiti merujuk antara satu sama lain dan hubungan itu diuruskan secara eksplisit.

Contoh:

// Student.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
@Data
public class Student {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String name;

    @ManyToMany(mappedBy = "students")
    private Set<Course> courses;
}

// Course.java
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.Set;

@Entity
@Data
public class Course {
    @Id
    @GeneratedValue(stratergy = GenerationType.Identity)
    private Long id;
    private String title;

    @ManyToMany
    private Set<Student> students;
}

Atas ialah kandungan terperinci Memahami Pemetaan JPA dalam Spring Boot: Hubungan Satu-dengan-Satu, Satu-ke-Ramai, Banyak-ke-Satu dan Banyak-ke-Ramai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:rentetanArtikel seterusnya:rentetan