java - Hibernate OneToOne 关系 java.lang.NullPointerException
问题描述
我正在为我的 Spring 项目制作购物车,我有用户实体、购物车和书籍,一个用户只能有一个购物车,所以我在用户和购物车之间建立了 OneToOne 关系,而且许多购物车可以包含许多书籍,所以我创建了 manyToMany 关系在购物车和预订我的代码之间:
图书实体:
@ManyToMany
@JoinTable(
name = "books_in_cart",
joinColumns = { @JoinColumn(name = "cart_id")},
inverseJoinColumns = { @JoinColumn(name = "book_id")}
)
private Set<Cart> inCarts = new HashSet<>();
购物车实体:
@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;
}
}
和用户实体
@OneToOne(mappedBy = "user",cascade = CascadeType.MERGE,fetch = FetchType.EAGER,orphanRemoval = true)
private Cart userCart = new 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";
}
我得到了这个例外:
java.lang.NullPointerException controller.libraryController.addToCart(libraryController.java:170) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
解决方案
映射肯定是错误的,可能整个模型都是错误的,因为看起来您根本没有连接表:
joinColumns = { @JoinColumn(name = "cart_id")},
inverseJoinColumns = { @JoinColumn(name = "book_id")}
这意味着,一个实体cart_id
在一个表和另一个表中都有一个名为的 id book_id
,这没有任何意义。这就是抛出异常的原因。
您需要修复模型,包括数据库和映射。这是一个很好的阅读。
推荐阅读
- javascript - 如何通过 React Native 中的函数访问组件的 ref?
- commercetools - 是否可以将自定义字段添加到产品?
- sql - SQL Server:导入行上的条件触发器
- android - 如何在android中使用artofdev只打开相机和裁剪
- php - wordpress `wp_remote_get`调用中的`缺少标题/正文分隔符`
- sun-codemodel - 如何在代码模型中创建一个简单的赋值语句?
- elasticsearch-opendistro - 如何在 Open Distro 上进行基本身份验证?
- java - 试图将 rgb 值转换为十六进制
- pandas - ValueError:当 HDF5 文件包含多个数据集时必须提供密钥,同时在 pandas 中读取 h5 文件我收到此错误
- php - 如何将会话 ID 与全部请求一起存储?