Rumah > Java > javaTutorial > 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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-08-13 16:39:56
asal
731 orang telah melayarinya

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

Salin selepas log masuk

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


Salin selepas log masuk

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

Salin selepas log masuk

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

Salin selepas log masuk

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;

}

Salin selepas log masuk

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;

}

Salin selepas log masuk

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

Salin selepas log masuk

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

Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan