簡體   English   中英

具有動態OR限制的Hibernate標准

[英]Hibernate criteria with dynamic OR restrictions

我想根據數組中元素的數量動態地將OR限制添加到Hibernate標准中。

在下面的示例中, Project是一個實體,以及User實體的@OneToMany屬性。 Project實體有一個名為name的屬性。 db.getSes()提供當前的Session

我目前的做法是

String[] project_name_filters = {"Project Name 1","Project Name 2"};

Criteria q = db.getSes().createCriteria(User.class);

if(project_name_filters.length > 0) {
    q.createAlias("project", "project");

    LogicalExpression or_exp = null;

    for(int ix_prj = 0 ; ix_prj < project_name_filters.length ; ix_prj++) {
            or_exp = Restrictions.or (or_exp,Restrictions.eq("project.name", project_name_filters[ix_prj]));
        }   

    q.add(or_exp);
}

@SuppressWarnings("unchecked")
List<User> users = (List<User>) q.list(); 

但是or_exp = null的初始化是不合適的。

我甚至不確定這是否是在hibernate查詢上實現動態OR限制的方法。

我該怎么辦?

從肯定是假的東西開始。

您可以使用Restrictions.sqlRestriction使用原始SQL構造此類條件:

Criterion impossibleCriterion = Restrictions.sqlRestriction("(1=0)");
LogicalExpression or_exp = Restrictions.or(impossibleCriterion, impossibleCriterion);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM