好的,我有这样的事情:
有身份证,姓名和姓氏的学生......
现在我创建了一个名为ACCOUNTS
的新java类,包含Id,Name和Value
还有:
@OneToMany(cascade = { CascadeType.ALL})
private Set<BankAccout> accounts;
public Student() {
accounts= new HashSet<BankAccout>();
}
public Set<BankAccout> getAccounts() {
return accounts;
}
public void setAccounts(Set<BankAccout> accounts) {
this.accounts= accounts;
}
现在,我有我的网站,在网站上有一张表格,上面有所有学生的数据......它们都是独一无二的
然后我不得不写一个新的课程,我必须在我的网站上添加一个listBox,显示所选的学生帐户...
我打电话给学生的旧查询看起来像这样:
@GET
@Path("/getAll")
@Produces(MediaType.APPLICATION_JSON)
public List<Student> getAll() {
return em.createQuery("from Student s").getResultList();
}
并且控制器看起来像这样:
$http.get('http://localhost:8080/CreditCardWEB/rest/cc/getAll').success(
function(data) {
$scope.result = data;
});
这一切都有效...在表中没有问题....但我不得不更改查询,以便能够将数据从帐户绑定到表....现在查询看起来像这样...
return em.createQuery("from Student s inner join fetch s.accounts").getResultList();
现在,桌子应该向我显示与以前相同的数据......也就是说,所有学生都是独一无二的......但它只向我展示了至少有一个帐户的学生....不仅如此,但是同一个学生不是一次出现,而是出现在桌子上的次数(他有账号)......
有什么建议吗?
答案 0 :(得分:1)
INNER JOIN
过滤掉 表中不匹配的记录。因此,您当前的加入是删除没有帐户的学生。解决这个问题的方法是使用LEFT JOIN
,即使他们没有帐户,也会保留所有学生:
return em.createQuery("from Student s left join fetch s.accounts").getResultList();
答案 1 :(得分:0)
我找到了解决方案,它与蒂姆非常接近。
这是:
return em.createQuery("Select distinct s from Student s left join fetch s.accounts").getResultList();