Java Spring中不能使用一对一关系

gupuwyp2  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(51)

我在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";
    }

8xiog9wr

8xiog9wr1#

我想你只是错过了级联。在OneToOne的两侧,添加CascadeType.ALLCascadeType.PERSIST
然后,您可以删除对登录loginDAO.save(login)的显式保存调用,并通过对khachHangDAO.save(khachHang);的调用来保存这两个实体。

login.setKhachHang(khachHang);
khachHang.setLogin(login);

khachHangDAO.save(khachHang);

字符串

相关问题