Java 休眠标准
假设我有如下类似的类(为简洁起见,指定了getter/setter) 使用hibernate条件,我希望运行一个查询,该查询显示“为我提供所有具有空元数据或未启用元数据的记录”。目前,我的代码执行以下操作: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 。。。但我们可以做得更好
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();