鍍金池/ 問(wèn)答/Java  網(wǎng)絡(luò)安全/ 關(guān)于spring data jpa布爾類型條件查詢異常

關(guān)于spring data jpa布爾類型條件查詢異常

entity:

 /**
 * 是否刪除
 */
private boolean delete;

 /**
 * 獲取 是否刪除
 */
@Column(name = "IS_DELETE", nullable = false)
public boolean isDelete() {
    return this.delete;
}

/**
 * 設(shè)置 是否刪除
 */
public void setDelete(boolean delete) {
    this.delete = delete;
}

jpa查詢:

// 創(chuàng)建時(shí)間倒序
Sort.Order order = new Sort.Order(Sort.Direction.DESC, "articleId");
Pageable pageable = new PageRequest(articlePageForm.getPageNo() - 1, articlePageForm.getPageSize(), new Sort(order));
Specification<ArticleEntity> specification = new Specification<ArticleEntity>() {
    @Override
    public Predicate toPredicate(Root<ArticleEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {

        List<Predicate> predicateList = new ArrayList<>();

        predicateList.add(cb.equal(root.get("userId"), "100001"));
        predicateList.add(cb.equal(root.<Boolean>get("delete"), false));

        Predicate[] pre = new Predicate[predicateList.size()];
        return cb.and(predicateList.toArray(pre));
    }
};

關(guān)鍵在于這一行:

predicateList.add(cb.equal(root.<Boolean>get("delete"), false));

去掉就沒(méi)問(wèn)題,感覺(jué)是boolean值的問(wèn)題,相關(guān)文檔也沒(méi)找到,請(qǐng)教這樣的問(wèn)題怎么解決?

異常信息:

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: generatedAlias0 near line 1, column 136 [................]

難道delete屬性的get方法應(yīng)該是 getDelete() ???!!!

回答
編輯回答
逗婦乳

root.<Boolean>get("delete").as(Boolean.class)

2017年7月27日 18:41
編輯回答
默念

把關(guān)鍵字設(shè)成屬性字段是不是該算是自尋煩惱,建議你把delete改成deleted, 生活會(huì)變得輕松很多。

@Column(name = "IS_DELETE" 《==》get("delete")
2018年8月31日 16:55