[英]How to implement @ForeignKey correctly using Spring Boot
我正在使用 Spring Boot 開發我的第一個應用程序來構建我的 web 服務。 該應用程序應該是一個簡單的健身房管理系統。 實際上,我設法為管理員(健身房所有者實體)和 Palestra(健身房實體)創建了 model、controller 和存儲庫。
管理員.java
@Entity(name="admin")
public class Admin {
private @Id @GeneratedValue Long id_admin;
private String nome;
private String cognome;
private String email;
private String password;
// Retionships
@OneToMany(mappedBy="admin", fetch = FetchType.LAZY)
private List <Palestra> palestre;
Admin() {} // Empty constructor
public Admin(Long id_admin, String nome, String cognome, String email, String password) {
super();
this.nome = nome;
this.cognome = cognome;
this.email = email;
this.password = password;
}
public Long getId_admin() {
return id_admin;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<Palestra> getPalestre() {
return palestre;
}
public void setPalestre(List<Palestra> palestre) {
this.palestre = palestre;
}
}
AdminController.java
@RestController
public class AdminController {
private final AdminRepository adminRepository;
public AdminController(AdminRepository repository) {
adminRepository = repository;
}
@GetMapping("/admins")
Iterable<Admin> getAdmins() {
return adminRepository.findAll();
}
@PostMapping("/admins")
Admin createAdmin(@RequestBody Admin newAdmin) {
return adminRepository.save(newAdmin);
}
}
帕萊斯特拉.java
@Entity(name="palestra")
public class Palestra {
private @Id @GeneratedValue Long id_palestra;
private String nome;
private String via;
private int civico;
private String citta;
// Relationships
@OneToMany(mappedBy="palestra")
private List<Trainer> trainers;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_admin")
private Admin admin;
public Palestra() {} // Empty constructor
public Palestra(Long id_palestra, String nome, String via, int civico, String citta) {
super();
this.id_palestra = id_palestra;
this.nome = nome;
this.via = via;
this.civico = civico;
this.citta = citta;
}
public Long getId_palestra() {
return id_palestra;
}
public void setId_palestra(Long id_palestra) {
this.id_palestra = id_palestra;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getVia() {
return via;
}
public void setVia(String via) {
this.via = via;
}
public int getCivico() {
return civico;
}
public void setCivico(int civico) {
this.civico = civico;
}
public String getCitta() {
return citta;
}
public void setCitta(String citta) {
this.citta = citta;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
}
PalestraController.java
@RestController
public class PalestraController {
private final PalestraRepository palestraRepository;
public PalestraController(PalestraRepository repository) {
palestraRepository = repository;
}
@GetMapping("/palestre")
Iterable<Palestra> getPalestre() {
return palestraRepository.findAll();
}
@PostMapping("/palestre")
Palestra createPalestra(@RequestBody Palestra newPalestra) {
return palestraRepository.save(newPalestra);
}
}
我使用 Postman 發送和測試請求: 這是存儲在數據庫中的結果:
如您所見, id_admin應該是外鍵,但具有 NULL 值。 我該如何解決這個問題?
您必須鏈接實體...
@PostMapping("/admins")
@Transactional
Admin createAdmin(@RequestBody Admin newAdmin) {
//find palestra by id
Palestra p = palestraRepo.findById(newAdmin.id_palestra);
Admin storedAdmin = adminRepository.save(newAdmin);
//link with admin
p.setAdmin(storedAdmin);
palestraRepo.save(p)
return storedAdmin;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.