Java 以编程方式创建hibernate析取查询
我有一段java代码,对hibernate析取查询进行硬编码,如下所示Java 以编程方式创建hibernate析取查询,java,hibernate,Java,Hibernate,我有一段java代码,对hibernate析取查询进行硬编码,如下所示 session = HibernateUtils.beginTransaction("outpatient"); Criteria criteria = session.createCriteria(AugmentToken.class); session.beginTransaction(); if (type == Constants.ICD9CPT) {
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")));
}
但这不是很优雅的代码。我想做的是将一个代码类型数组传递给一个方法,并动态构造dijunction标准。我查看的每个网站都提供了类似于上述的析取查询示例,但这对我来说不起作用,因为我不想硬编码标准限制的构造,因为代码类型的数量可能会有所不同
我该怎么做
谢谢,
艾略特我想我明白了。将析取创建为变量,然后依次添加到该变量。
具体而言:
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);
String[]codeTypes=新字符串[3];
代码类型[0]=“d”;
代码类型[1]=“p”;
代码类型[2]=“c”;
/*注意:上面的代码通常会被传递到包含下面代码的方法中*/
条件=session.createCriteria(AugmentToken.class);
session.beginTransaction();
析取析取=限制。析取();
对于(int x=0;x
我在214页的Hibernate开头找到了答案。这本书可以从books.google.com上找到