我正在使用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()方法返回空列表。
有什么建议吗?
答案 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()));