Java 将具有空ArrayList的对象添加到我的存储库
这是我的第一个问题,我是个十足的傻瓜。在Java工作了3个月,所以要温柔。我正在做一个在线登记跟踪婚礼和用户。用户可以有多个婚礼,反之亦然。这本质上是一种多对多关系,但我正在尝试另一种方法:将用户和婚礼类嵌入彼此的数组列表。像这样Java 将具有空ArrayList的对象添加到我的存储库,java,jpa,arraylist,nullpointerexception,many-to-many,Java,Jpa,Arraylist,Nullpointerexception,Many To Many,这是我的第一个问题,我是个十足的傻瓜。在Java工作了3个月,所以要温柔。我正在做一个在线登记跟踪婚礼和用户。用户可以有多个婚礼,反之亦然。这本质上是一种多对多关系,但我正在尝试另一种方法:将用户和婚礼类嵌入彼此的数组列表。像这样 package com.theironyard.Entities; import javax.persistence.*; import java.time.LocalDate; import java.util.ArrayList; import java
package com.theironyard.Entities;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* Created by macbookair on 12/8/15.
*/
@Entity
@Table(name = "weddings")
public class Wedding {
public ArrayList <User> guests;
// ArrayList here is to store users associated with Wedding.
@Id
@GeneratedValue
@Column(nullable = false)
public int id;
@Column(nullable = false)
public String weddingName;
@Column(nullable = false)
public String location;
@Column(nullable = false)
public String date;
public Wedding(){
}
public Wedding(String date, String location, String weddingName, int id) {
this.date = date;
this.location = location;
this.weddingName = weddingName;
this.id = id;
}
public Wedding(ArrayList guests) {
this.guests = guests;
}
public int getId() {
return id;
}
public ArrayList getGuests() {
return guests;
}
public void setGuests(ArrayList guests) {
this.guests = guests;
}
public void setId(int id) {
this.id = id;
}
public String getWeddingName() {
return weddingName;
}
public void setWeddingName(String weddingName) {
this.weddingName = weddingName;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
//将用户添加到婚礼类中的“来宾”数组列表中
Invite invite = new Invite();
invite.isAdmin= true;
invite.wedding= wedding;
invite.email = user.email;
user.userWeddings.add(wedding); // adding user to List in "User class"
return wedding;
}
但是我得到了一个空指针异常,因为数组列表是空的。我的印象是,如果我没有明确地说它们是不可空的,那么默认情况下它们是不可空的。我考虑过添加(nullable=true)注释,但如果不将其作为数据库中的一列,我似乎无法做到这一点
基本上,我无法添加用户/婚礼对象,因为嵌入的ArrayList为null。即使解决了这个问题,也会有一种更简单的方法允许多个用户参加每个婚礼,反之亦然 您忘记声明定义用户和实体之间关系的JPA注释。(以上两个字段)
然后,如果您不必在User或users in Wedding中维护婚礼的任何顺序,则可以使用界面而不是列表(在您的示例中为ArrayList)来处理此双向关系的双方
注意:如果正确定义了此映射,则在托管实体(已持久化,未分离)中,与其他实体的关系中涉及的集合类型字段永远不会得到null值
另见
@RequestMapping(path = "/create-wedding", method = RequestMethod.POST)
public Wedding createWedding(@RequestBody Wedding wedding, HttpSession session) throws Exception {
weddings.save(wedding);
User user = users.findOneByEmail((String) session.getAttribute("email"));
if (user == null) {
throw new Exception("User does not exist");
}
wedding.guests.add(user);
Invite invite = new Invite();
invite.isAdmin= true;
invite.wedding= wedding;
invite.email = user.email;
user.userWeddings.add(wedding); // adding user to List in "User class"
return wedding;
}