1
私は名前プロジェクトのエンティティを持っています。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」との1対1の関係を持っている
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;
}
}
を見ることができるように今、私は2つの条件を満たしてHQLクエリを書きたいです。
1)SysProjectがnullのすべてのプロジェクト。
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はNULLとp.sysProject.sysupdateされていない= p.updatedAt!)
"FROM Project WHERE sysProject IS NULL"は、1対1のマッピングがある場合は動作しません。 –