我只是想加入三张桌子。 这些是我的表格:
Account
acc_id
Account 2 Project
acc_id, proj_id
Project
proj_id
Topic
t_id, proj_id
我的课程
Topic //(with a member Project project)
Project
Account //(with a member List<Project> assignedProjects)
现在我添加了一个查询来获取所有assignedProjects
的标题,这可以正常工作。我使用createCriteria
和createAlias
来加入。
private void setProjectCriteria(Criteria criteria, AccountFilter accountFilter) {
/*
criteria.createCriteria("assignedProjects").createAlias("sponsor", "s").add(
Restrictions.or(
Restrictions.like("title", "%" + accountFilter.getProject().getTitle() + "%"),
Restrictions.like("s.title", "%" + accountFilter.getProject().getTitle() + "%")));
*/
Criterion criterion = null;
for(Project project : accountFilter.getProjects()) {
Criterion title = Restrictions.or(Restrictions.like("title", "%" + project.getTitle() + "%"),
Restrictions.like("s.title", "%" + project.getTitle() + "%"));
//Restrictions.like("t.title", "%" + project.getTitle() + "%"));
if(criterion == null)
criterion = title;
criterion = Restrictions.or(criterion, title);
}
criteria.createCriteria("assignedProjects").createCriteria("topic").createAlias("sponsor", "s").add(criterion);
}
但是,现在,我想加入项目主题。每个项目只有一个主题。 所以从项目的角度来看,它是一对一的。
我尝试添加
criteria.createAlias("topic", "t")
但是这给了我一个错误,说类Project没有成员主题(这是正确的,因为不是Project有成员主题,但是Topic有成员项目)。如何将该条件添加到我现有的联接中?