2016-06-28 15 views
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!)

答えて

-1

試してみますこれは:

String hql = "FROM Project WHERE sysProject IS NULL OR (sysProject.id IS NOT NULL AND sysProject.sysupdate != updatedAt)"; 
Query query = session.createQuery(hql); 
List<Project> projects = query.list(); 
+0

"FROM Project WHERE sysProject IS NULL"は、1対1のマッピングがある場合は動作しません。 –

関連する問題