简体   繁体   English

Hibernate OneToOne 关系 java.lang.NullPointerException

[英]Hibernate OneToOne relationship java.lang.NullPointerException

I'm making cart for my Spring project, I have User entity, cart and books, one user can have only one cart, so i made OneToOne relationship between user and cart, also many carts can contain many books, so i created manyToMany relationship between cart and book my code:我正在为我的 Spring 项目制作购物车,我有用户实体、购物车和书籍,一个用户只能拥有一个购物车,所以我在用户和购物车之间建立了 OneToOne 关系,许多购物车也可以包含许多书籍,所以我创建了 manyToMany 关系在购物车和预订我的代码之间:

Book entity:图书实体:

         @ManyToMany
        @JoinTable(
        name = "books_in_cart",
        joinColumns = { @JoinColumn(name = "cart_id")},
        inverseJoinColumns = { @JoinColumn(name = "book_id")}
)
private Set<Cart> inCarts = new HashSet<>();

Cart entity:购物车实体:

@Entity
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;


@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idUsers")
private User user;

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

@ManyToMany
@JoinTable(
        name = "books_in_cart",
        joinColumns = { @JoinColumn(name = "book_id")},
        inverseJoinColumns = { @JoinColumn(name = "cart_id")}
)
private Set<Book> books = new HashSet<>();

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public Set<Book> getBooks() {
    return books;
}

public void setBooks(Set<Book> books) {
    this.books = books;
}
}

and User entity和用户实体

@OneToOne(mappedBy = "user",cascade = CascadeType.MERGE,fetch = FetchType.EAGER,orphanRemoval =  true)
private Cart userCart = new Cart();

Code that I use to add book to user's cart:我用来将书添加到用户购物车的代码:

@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";
}

I'm getting this exception :我收到此异常:

java.lang.NullPointerException controller.libraryController.addToCart(libraryController.java:170) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) java.lang.NullPointerException controller.libraryController.addToCart(libraryController.java:170) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

The mapping is definitely wrong, probably the whole model is, because it look like you don't have a joining table at all:映射肯定是错误的,可能整个模型都是错误的,因为看起来您根本没有连接表:

joinColumns = { @JoinColumn(name = "cart_id")},
inverseJoinColumns = { @JoinColumn(name = "book_id")}

This means, that one entity has an id named cart_id in one table and book_id in the other one, which doesn't make any sense.这意味着,一个实体在一张表中具有名为cart_id的 id,在另一张表中具有名为book_id的 id,这没有任何意义。 That is why the exception is thrown.这就是抛出异常的原因。

You need to fix your model, both database and mapping.您需要修复模型,包括数据库和映射。 Here's a good read about it. 这是一个很好的阅读。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM