假设我有一些类似于以下的类(为简洁起见,省略了 getters/setters)。
public class Record{
// ... properties
private Metadata metadata;
@OneToOne(cascade=CascadeType.ALL)
@PrimaryKeyJoinColumn
public Metadata getMetadata(){
return metadata;
}
}
public class Metadata {
private Boolean enabled = false;
private Record record;
@OneToOne
@PrimaryKeyJoinColumn
public getRecord() {
return record;
}
@Column("enabled")
public Boolean getEnabled() {
return enabled;
}
}
使用休眠条件,我想运行一个查询,上面写着“给我所有具有空元数据或未启用元数据的记录”。目前我的代码执行以下操作:
List results = session().createCriteria(Record.class).list();
// iterate over results, pluck out the Records that match my criteria
...但我们可以做得更好,对吧?
我尝试创建元数据的别名并尝试查看别名是否为空,或者 alias.property 是否符合我的条件,即 (Restrictions.eq("metadata.enabled", false) 但这不起作用。我还尝试使用析取来通过我正在寻找的两个条件过滤我的结果(元数据为空,或未启用元数据)。这些方法都不起作用;我认为这是因为我正在尝试使用标准没有以我期望的方式加入。如果可以的话,请为我阐明这一点。