我试图创建一个查询,我可以通过某种连接表从用户获取项目。当我尝试这个时,我得到一个Nullpointer异常,但我不明白为什么;使用连接表获取实体GAE
这些都是我的班
项目
@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);
}
}
ProjectUser
@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
@Patrice它是JPA 2.当你执行'q.getResultList()'查询运行。我认为实体经理会照顾这一点,但我不确定。本主题相当新颖:) –
您是否阅读了[docs](https://cloud.google.com/appengine/docs/java/datastore/jpa/overview-dn2),列出了Datastore不支持的JPA 2的功能?就个人而言,如果您想充分利用数据存储,我建议不要使用JPA。 – tx802