1
我有一个名为Project的实体。HQL:帮助执行加入
public class Project {
@EmbeddedId
private ProjectID id;
@Column(name="updated_at")
private Date updatedAt;
@Column(name="sys_updated_at")
private Date sysUpdatedAt;
@OneToOne(optional=true, mappedBy="project", fetch=FetchType.EAGER)
private SysProject sysProject;
}
正如你可以看到它与“SysProject”一对一关系
public class SysProject extends BaseSysEntity implements Serializable {
@OneToOne(optional=true, fetch= FetchType.LAZY)
@JoinColumns({
@JoinColumn(name="sysClientId", referencedColumnName="sysClientId"),
@JoinColumn(name="pProject", referencedColumnName="pProject")
})
private Project project;
@Column(name="sysupdate")
private Date sysupdate;
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
}
现在我想写一个HQL查询满足两个条件。
1)SysProject为空的所有项目。
2)所有的项目,该项目具有SysProject但Project.updatedAt!= SysProject.sysupdate
我已经写了下面的查询,但它只返回满足点项目(2)
SELECT p FROM Project p WHERE (NOT EXISTS (SELECT s FROM p.sysProject s)) OR (p.sysProject.id IS NOT NULL AND p.sysProject.sysupdate != p.updatedAt)
当我删除以下部分来自查询它满足点(1):
(p.sysProject.id IS NOT NULL和p.sysProject.sysupdate = p.updatedAt!)
对于您的信息“从项目WHERE sysProject IS NULL”从不工作时,有一对一的映射。 –