1

我有一段 java 代码硬编码一个看起来像这样的休眠析取查询

session = HibernateUtils.beginTransaction("outpatient");
        Criteria criteria = session.createCriteria(AugmentToken.class);
        session.beginTransaction();
        if (type == Constants.ICD9CPT) {
            criteria.add(Restrictions.disjunction()
                    .add(Restrictions.eq("codeType", "d"))
                    .add(Restrictions.eq("codeType", "p"))
                    .add(Restrictions.eq("codeType", "c")));
        } else if (type == Constants.EM) {
            criteria.add(Restrictions.disjunction()
                    .add(Restrictions.eq("codeType", "eros"))
                    .add(Restrictions.eq("codeType", "ehpi"))
                    .add(Restrictions.eq("codeType", "epe")));
        }

但这不是很优雅的代码。我想做的是将一组代码类型传递给一个方法,并动态构造分词条件。我查看的每个网站都提供了类似于上面的析取查询示例,但这对我不起作用,因为我不想硬编码标准的限制构造,因为代码类型的数量可能会有所不同。

我该怎么做呢?

谢谢,

艾略特

4

1 回答 1

2

我想我想通了。您将析取创建为变量,然后依次添加。
具体来说:

 String [] codeTypes = new String[3];
 codeTyes[0]="d";
 codeTypes[1]="p";
 codetypes[2]="c";
 /* note the above would normally be passed into the method containing the code below */
 Criteria criteria = session.createCriteria(AugmentToken.class);
    session.beginTransaction();
 Disjunction disjunction = Restrictions.disjunction();
 for (int x = 0; x < codeTypes.length; x++ ) {
  disjucntion.add(Restrictions.eq("codeType",codeTypes[x]);
 }
 criteria.add(disjunction);

我在第 214 页的开始休眠中找到了答案。这本书可从 books.google.com 访问。

于 2012-09-29T23:45:29.447 回答