java - hibernate 标准

标签 java hibernate

假设我有一些类似以下的类(为简洁起见,省略了 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;
       }
    }

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

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) 但事实并非如此工作。我还尝试使用析取来通过我正在寻找的两个条件(元数据为空,或元数据未启用)来过滤我的结果。这些方法都不起作用;我认为这是因为我正在尝试do with criteria 并没有按照我期望的方式加入。如果可以的话,请为我解释一下这一点。

最佳答案

也许是这样的:

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();

关于java - hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972479/

相关文章:

java - 命令行进程未从标准输入接收任何内容

java - 是否有可能检测到输出的去向 - 终端或管道/文件?

java - JFXtra 议程仅在特定时间之间显示?

java - JTA、带有atomikos的Hibernate多个XA数据源不维护SpringBoot中的事务

java - 使用 Hibernate 映射 FunctionalJava Option<Type>

java.lang.NoClassDefFoundError : org/hibernate/mapping/MappedSuperclass

java - 如何以编程方式根据架构验证 JSON 字符串?

java - 给定相邻节点的坐标构建图

java - 读取大文件(Java堆空间)

java - 如何改进hibernate查询?