[英]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.