Java 休眠标准

Java 休眠标准,java,hibernate,Java,Hibernate,假设我有如下类似的类(为简洁起见,指定了getter/setter) 使用hibernate条件,我希望运行一个查询,该查询显示“为我提供所有具有空元数据或未启用元数据的记录”。目前,我的代码执行以下操作: List results = session().createCriteria(Record.class).list(); // iterate over results, pluck out the Records that match my criteria 。。。但我们可以做得更好

假设我有如下类似的类(为简洁起见,指定了getter/setter)

使用hibernate条件,我希望运行一个查询,该查询显示“为我提供所有具有空元数据或未启用元数据的记录”。目前,我的代码执行以下操作:

List results = session().createCriteria(Record.class).list();

// iterate over results, pluck out the Records that match my criteria
。。。但我们可以做得更好,对吗


我尝试创建元数据的别名,并尝试查看别名是否为null,或者alias.property是否与我的条件匹配,即(Restrictions.eq(“metadata.enabled”,false),但这不起作用。我还尝试使用析取来根据我要查找的两个条件筛选结果(元数据为null,或者元数据未启用)。这两种方法都不起作用;我想这是因为我试图用标准做的事情没有以我期望的方式加入。如果可以,请为我解释一下。

可能是这样的:

Criteria crit = session().createCriteria(Record.class);
crit.add( Restrictions.disjunction()
        .add( Restrictions.isNull("metadata") )
        .add( Restrictions.eq("metadata.enabled",  false) )
);
List results = crit.list();
或者这个:

List results = session().createCriteria(Record.class)
    .add( Restrictions.or(
        Restrictions.eq( "metadata.enabled", false ),
        Restrictions.isNull("metadata")
    )).list();

是的,这是我最初的实现。这不起作用。如果人们能告诉我这确实是正确的方法,那么我的问题一定在其他地方。我个人在使用DetachedCriteria(使用spring)时遇到了嵌套属性的问题。我没有弄清楚问题是什么……我必须创建“根”子标准在特定实体上,执行进一步筛选。
List results = session().createCriteria(Record.class)
    .add( Restrictions.or(
        Restrictions.eq( "metadata.enabled", false ),
        Restrictions.isNull("metadata")
    )).list();