【发布时间】:2023-03-16 03:45:01
【问题描述】:
我试图创建一个查询,我可以通过某种连接表从用户那里获取项目。当我尝试这个时,我得到一个 Nullpointer 异常,但我不明白为什么;
这些是我的课程
项目
@Entity
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key projectId;
private String projectName;
private User projectLeader;
private ArrayList<Task> tasks;
public Project(){
tasks = new ArrayList<Task>();
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public Key getProjectId() {
return projectId;
}
public void setProjectId(Key projectId) {
this.projectId = projectId;
}
public Project(User pLeader){
tasks = new ArrayList<Task>();
}
public User getProjectLeader() {
return projectLeader;
}
public void setProjectLeader(User projectLeader) {
this.projectLeader = projectLeader;
}
public ArrayList<Task> getTasks() {
return tasks;
}
public void setTasks(ArrayList<Task> tasks) {
this.tasks = tasks;
}
public void addTask(Task newTask){
tasks.add(newTask);
}
public void removeTask(Task removeableTask){
tasks.remove(removeableTask);
}
}
项目用户
@Entity
public class ProjectUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Key projectUserId;
Key user;
Key project;
public ProjectUser(Key u, Key p){
this.user = u;
this.project = p;
}
public Key getProjectUserId() {
return projectUserId;
}
public void setProjectUserId(Key projectUserId) {
this.projectUserId = projectUserId;
System.out.println("");
}
public Key getUser() {
return user;
}
public void setUser(Key user) {
this.user = user;
}
public Key getProject() {
return project;
}
public void setProject(Key project) {
this.project = project;
}
}
我的数据存储中的记录
对于项目用户
对于项目
对于用户
正如您在 projectuser 记录中看到的,有一个项目链接到现有用户。我尝试使用以下方法获取项目,但随后在这一行得到空指针:List<Project> userProjects = q.getResultList();
public List<Project> getUserProjects(User u) {
EntityManager em = EMFService.get().createEntityManager();
Query q = em.createQuery("SELECT p FROM Project p, ProjectUser pu WHERE pu.user = :User AND p.projectId = pu.project");
q.setParameter("User", u.getUserId());
List<Project> userProjects = q.getResultList();
return userProjects;
}
所以我的问题是:为什么我会得到一个空指针,我该怎么做才能解决这个问题?
提前致谢:)
【问题讨论】:
-
我不熟悉 JPA(1 或 2?),无论如何......你不需要在创建后运行查询吗?
-
@Patrice 这是 JPA 2。当您执行
q.getResultList()时,查询运行。我认为实体经理会处理这个问题,但我不确定。这个话题很新:) -
您是否阅读过docs,其中列出了 Datastore 不支持的 JPA 2 功能?如果您想充分利用 Datastore,我个人建议不要使用 JPA。
标签: google-app-engine jpa google-cloud-datastore