使用Restrictions.not时,Hibernate criteria.list()返回空列表

时间:2016-05-23 18:05:37

标签: java hibernate

我正在使用Spring with JPA 2.0和Hibernate 4.2.19.Final,我正在尝试构建一个动态查询,它具有从Restrictions类方法生成的简单谓词。 Restrictions.like("attributes.value" + value.getKey() , value.getValue());。我的实体存储在稀疏表中,其中列的编号与属性描述有关。

实体:

@Entity
@Table(name = "MY_ENTITIES")
public class Entity {

  @Id
  @GeneratedValue
  Long id;

  @Embedded
  Attributes attributes;
}

@Embeddable
public class Attributes{

  /** Attribute 1. */
  @Embedded
  @Column(name = "value_1")
  private String attribute1;

         *

  /** Attribute N. */
  @Embedded
  @Column(name = "value_N")
  private String attributeN;
}

有一些复杂的谓词,例如AND,OR,NOT谓词,它们是通过嵌套上述简单谓词获得的。

当我使用AND和OR谓词但是涉及NOT的更复杂的表达式时,一切似乎都运行良好,例如:

((attribute1=% OR attribute2=%) AND attribute3=%) AND NOT attribute4=%

当数据库中的实体满足条件时,Criteria.list()方法返回空列表。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

显然是标准:

Restrictions.not(Restrictions.like("attributes.value" + value.getKey(), value.getValue()));
如果表格中的值为 false ,则

返回 null

修正了我的简单标准:

Restrictions.and(Restrictions.isNotNull("attributes.value" + value.getKey()),
     Restrictions.like("attributes.value" + value.getKey(), value.getValue()));