Hibernate OneToOne关系java.lang.NullPointerException

Hibernate OneToOne关系java.lang.NullPointerException,java,spring,hibernate,set,hibernate-mapping,Java,Spring,Hibernate,Set,Hibernate Mapping,我正在为我的Spring项目制作cart,我有用户实体、cart和books,一个用户只能有一个cart,所以我在用户和cart之间建立了一个one关系,许多cart可以包含许多书籍,所以我在cart和book之间创建了许多关系我的代码: 账簿实体: @ManyToMany @JoinTable( name = "books_in_cart", joinColumns = { @JoinColumn(name = "cart_id

我正在为我的Spring项目制作cart,我有用户实体、cart和books,一个用户只能有一个cart,所以我在用户和cart之间建立了一个one关系,许多cart可以包含许多书籍,所以我在cart和book之间创建了许多关系我的代码:

账簿实体:

         @ManyToMany
        @JoinTable(
        name = "books_in_cart",
        joinColumns = { @JoinColumn(name = "cart_id")},
        inverseJoinColumns = { @JoinColumn(name = "book_id")}
)
private Set<Cart> inCarts = new HashSet<>();
我用于将书本添加到用户购物车的代码:

@PostMapping(value = "/addToCart")
@Secured("USER")
public String addToCart(@RequestParam(name = "ids") int id,Principal principal){
    System.out.println(principal.getName());
    User login = userDao.getByLogin(principal.getName());
    Book book = service.getById(id);
    login.getUserCart().setUser(login);
    login.getUserCart().getBooks().add(book);
    userDao.save(login);
    return "redirect:/books";
}
我得到一个例外:

java.lang.NullPointerException controller.libraryController.addToCart(libraryController.java:170) sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)


映射肯定是错误的,可能整个模型都是错误的,因为看起来您根本没有连接表:

joinColumns = { @JoinColumn(name = "cart_id")},
inverseJoinColumns = { @JoinColumn(name = "book_id")}
这意味着,一个实体在一个表中有一个名为
cart\u id
的id,在另一个表中有一个名为
book\u id
的id,这没有任何意义。这就是抛出异常的原因


您需要修复您的模型,包括数据库和映射。这是一本很好的读物。

您的多人映射错误()。第170行是空的,但我们不知道那是哪一行,所以很难帮上忙。
@PostMapping(value = "/addToCart")
@Secured("USER")
public String addToCart(@RequestParam(name = "ids") int id,Principal principal){
    System.out.println(principal.getName());
    User login = userDao.getByLogin(principal.getName());
    Book book = service.getById(id);
    login.getUserCart().setUser(login);
    login.getUserCart().getBooks().add(book);
    userDao.save(login);
    return "redirect:/books";
}
joinColumns = { @JoinColumn(name = "cart_id")},
inverseJoinColumns = { @JoinColumn(name = "book_id")}