我在javaspring中有一个问题,当使用一对一关系时,为什么我不能将khachHang类中的用户名Map到登录类,尽管login. getName不为null,我已经尝试了很多次,但它是错误的,CCCD可以导入到Login类,但khachHang无法获得Login的变量。这个错误是什么意思。谢谢。
这是我的Login类:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "Login")
public class Login {
@Id
private String username;
private String password;
private boolean role;
@OneToOne
@JoinColumn(name = "CCCD", referencedColumnName = "CCCD")
private KhachHang khachHang;
public Login(String username, String password, boolean role) {
this.username = username;
this.password = password;
this.role = role;
}
}
字符串
这是我的KhachHang类:
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "ThongTinKhachHang")
public class KhachHang {
@Id
private String CCCD;
private String tenKhachHang;
private boolean gioiTinh;
private String diaChi;
private String email;
private String soDienThoai;
@OneToOne(mappedBy = "khachHang")
@JoinColumn(name = "username", referencedColumnName = "username")
private Login login;
@OneToMany(mappedBy = "khachHang", cascade = CascadeType.ALL)
private List<ChiTietDatTour> chiTietDatTours;
public KhachHang(String CCCD, String tenKhachHang, boolean gioiTinh, String diaChi, String email, String soDienThoai, Login login) {
this.CCCD = CCCD;
this.tenKhachHang = tenKhachHang;
this.gioiTinh = gioiTinh;
this.diaChi = diaChi;
this.email = email;
this.soDienThoai = soDienThoai;
this.login = login;
}
}
型
这是从数据库.
查询的结果
更新:我已经更新了保存到数据库逻辑:
@PostMapping("/signup/userSignUp")
public String userSaveToDatabase(@RequestParam(name = "hoTen") String hoTen,
@RequestParam(name = "username") String username,
@RequestParam(name = "phonenumber") String phoneNumber,
@RequestParam(name = "CCCD") String CCCD,
@RequestParam(name = "email") String email,
@RequestParam(name = "diachi") String diaChi,
@RequestParam(name = "password") String password,
@RequestParam(name = "reconfirm") String reconfirm,
@RequestParam(name = "gioiTinh") boolean gioiTinh,
Model model) {
if (loginDAO.existsByUsername(username)) {
model.addAttribute("error", "Username already exists.");
return "redirect:/signup";
}
if (!password.equals(reconfirm)) {
model.addAttribute("error", "Password and reconfirm password do not match.");
return "redirect:/index";
}
if (!loginDAO.existsCCCD(CCCD).isEmpty()) {
model.addAttribute("error", "CCCD already exists.");
return "redirect:/book";
}
if (!checkPassword(password) || !validateEmail(email) ||
!checkCCCD(CCCD) || !checkPhone(phoneNumber) || !checkAddress(diaChi)) {
return "redirect:/test3";
}
Login login = new Login(username, password, false);
KhachHang khachHang = new KhachHang(CCCD, hoTen, gioiTinh, diaChi, email, phoneNumber, login);
login.setKhachHang(khachHang);
khachHang.setLogin(login);
khachHangDAO.save(khachHang);
loginDAO.save(login);
return "redirect:/test2";
}
型
1条答案
按热度按时间8xiog9wr1#
我想你只是错过了级联。在OneToOne的两侧,添加
CascadeType.ALL
或CascadeType.PERSIST
。然后,您可以删除对登录
loginDAO.save(login)
的显式保存调用,并通过对khachHangDAO.save(khachHang);
的调用来保存这两个实体。字符串