类org.hibernate.criterion.Junction源码实例Demo

下面列出了怎么用org.hibernate.criterion.Junction的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: Knowage-Server   文件: KpiDAOImpl.java
@Override
public List<Target> listOverlappingTargets(final Integer targetId, final Date startDate, final Date endDate, final Set<Kpi> kpis) {
    return executeOnTransaction(new IExecuteOnTransaction<List<Target>>() {
        @Override
        public List<Target> execute(Session session) throws Exception {
            Junction kpiJunction = Restrictions.disjunction();
            for (Kpi kpi : kpis) {
                kpiJunction.add(Restrictions.conjunction().add(Restrictions.eq("_kpi.sbiKpiKpiId.id", kpi.getId()))
                        .add(Restrictions.eq("_kpi.sbiKpiKpiId.version", kpi.getVersion())));
            }
            // DetachedCriteria kpis = DetachedCriteria.forClass(SbiKpiKpi.class)
            Criteria c = session.createCriteria(SbiKpiTarget.class);
            Junction d = Restrictions.disjunction();
            d.add(Restrictions.conjunction()
                    .add(Restrictions.disjunction().add(Restrictions.le("startValidity", startDate)).add(Restrictions.isNull("startValidity")))
                    .add(Restrictions.disjunction().add(Restrictions.ge("endValidity", startDate)).add(Restrictions.isNull("endValidity"))));
            d.add(Restrictions.conjunction()
                    .add(Restrictions.disjunction().add(Restrictions.le("startValidity", endDate)).add(Restrictions.isNull("startValidity")))
                    .add(Restrictions.disjunction().add(Restrictions.ge("endValidity", endDate)).add(Restrictions.isNull("endValidity"))));
            if (targetId != null) {
                c.createAlias("sbiKpiTargetValues", "_targetValues").add(d).createAlias("_targetValues.sbiKpiKpi", "_kpi").add(kpiJunction)
                        .add(Restrictions.ne("targetId", targetId));
            } else {
                c.createAlias("sbiKpiTargetValues", "_targetValues").add(d).createAlias("_targetValues.sbiKpiKpi", "_kpi").add(kpiJunction);
            }
            List<SbiKpiTarget> lst = c.list();
            List<Target> targetList = new ArrayList<>();
            for (SbiKpiTarget sbiKpiTarget : lst) {
                targetList.add(from(sbiKpiTarget, false));
            }
            return targetList;
        }
    });
}
 
源代码2 项目: ctsms   文件: CategoryCriterion.java
private static boolean applyCategoryCriterion(Object criteriaJunction, CategoryCriterion categoryCriterion) {
	Criterion restriction = getCategoryCriterionRestriction(categoryCriterion);
	if (restriction != null) {
		if (criteriaJunction instanceof Criteria) {
			((Criteria) criteriaJunction).add(restriction);
			return true;
		} else if (criteriaJunction instanceof Junction) {
			((Junction) criteriaJunction).add(restriction);
			return true;
		}
	}
	return false;
}
 
源代码3 项目: ctsms   文件: CategoryCriterion.java
private static void applyCategoryCriterions(Criteria criteria, Junction junction, CategoryCriterion... categoryCriterions) {
	if (criteria != null && junction != null && categoryCriterions != null) {
		if (categoryCriterions.length > 0) {
			boolean applied = false;
			for (int i = 0; i < categoryCriterions.length; i++) {
				applied |= applyCategoryCriterion(junction, categoryCriterions[i]);
			}
			if (applied) {
				criteria.add(junction);
			}
		}
	}
}
 
源代码4 项目: ctsms   文件: VisitScheduleItemDaoImpl.java
private static LinkedHashMap<String, Projection> applyExpandDateModeCriterions(org.hibernate.Criteria visitScheduleItemCriteria, Long probandId, Timestamp from, Timestamp to,
		org.hibernate.criterion.Criterion or) {
	// cartesian product <visitscheduleitems> x <start tag values> x <stop tag values>
	org.hibernate.Criteria startTagValuesCriteria = visitScheduleItemCriteria.createCriteria("startTag", CriteriaSpecification.LEFT_JOIN)
			.createCriteria("tagValues", "startTagValues", CriteriaSpecification.LEFT_JOIN);
	org.hibernate.Criteria startTagValuesValueCriteria = startTagValuesCriteria.createCriteria("value",
			CriteriaSpecification.LEFT_JOIN);
	org.hibernate.Criteria stopTagValuesCriteria = visitScheduleItemCriteria.createCriteria("stopTag", CriteriaSpecification.LEFT_JOIN).createCriteria("tagValues",
			"stopTagValues", CriteriaSpecification.LEFT_JOIN);
	org.hibernate.Criteria stopTagValuesValueCriteria = stopTagValuesCriteria.createCriteria("value", CriteriaSpecification.LEFT_JOIN);
	// from the cross product, remove those with start+stop values of different probands. also include rows without existing stop tag values
	visitScheduleItemCriteria.add(CriteriaUtil.applyOr(
			Restrictions.or(Restrictions.eqProperty("startTagValues.listEntry.id", "stopTagValues.listEntry.id"), Restrictions.isNull("stopTagValues.listEntry.id")), or));
	// narrow to particular proband, if given
	org.hibernate.Criteria startTagValuesListEntryCriteria = startTagValuesCriteria.createCriteria("listEntry", "startTagValuesListEntry", CriteriaSpecification.LEFT_JOIN);
	if (probandId != null) {
		startTagValuesListEntryCriteria.add(CriteriaUtil.applyOr(Restrictions.or(Restrictions.isNull("proband.id"), Restrictions.eq("proband.id", probandId.longValue())), or));
	}
	// only rows with proband group matching the group of the visitschelute item (or those with no group)
	visitScheduleItemCriteria
			.add(CriteriaUtil.applyOr(Restrictions.or(Restrictions.isNull("startTagValuesListEntry.id"),
					Restrictions.or(Restrictions.eqProperty("startTagValuesListEntry.group.id", "group.id"), Restrictions.isNull("group.id"))), or));
	CriteriaQueryTranslator translator = CriteriaUtil.getCriteriaQueryTranslator(visitScheduleItemCriteria);
	// prepare sql fragments:
	String offsetSql = translator.getColumn(visitScheduleItemCriteria, "offsetSeconds");
	String durationSql = translator.getColumn(visitScheduleItemCriteria, "duration");
	String tagStartSql = translator.getColumn(startTagValuesValueCriteria, "timestampValue");
	String tagStopSql = translator.getColumn(stopTagValuesValueCriteria, "timestampValue");
	String tagStartOffsetSql = MessageFormat.format(Settings.getString(SettingCodes.SQL_ADD_SECONDS_TERM, Bundle.SETTINGS, null),
			tagStartSql, offsetSql);
	String tagStopOffsetSql = MessageFormat.format(Settings.getString(SettingCodes.SQL_ADD_SECONDS_TERM, Bundle.SETTINGS, null),
			tagStopSql, offsetSql);
	String durationStopOffsetSql = MessageFormat.format(Settings.getString(SettingCodes.SQL_ADD_SECONDS_TERM, Bundle.SETTINGS, null),
			tagStartOffsetSql, durationSql);
	String probandIdSql = translator.getColumn(startTagValuesListEntryCriteria, "proband.id");
	// date filtering
	Junction junction = Restrictions.disjunction();
	if (or != null) {
		junction.add(or);
	}
	if (from != null || to != null) {
		junction.add(Restrictions.and(Restrictions.eq("mode", VisitScheduleDateMode.STATIC), CriteriaUtil.getClosedIntervalCriterion(from, to, null)));
		junction.add(Restrictions.and(Restrictions.eq("mode", VisitScheduleDateMode.TAGS),
				Restrictions.and(Restrictions.sqlRestriction("(" + tagStartSql + ") < (" + tagStopSql + ")"),
						CriteriaUtil.getClosedIntervalCriterion(from, to, null, tagStartOffsetSql, tagStopOffsetSql))));
		junction.add(
				Restrictions.and(Restrictions.eq("mode", VisitScheduleDateMode.TAG_DURATION), Restrictions.and(Restrictions.sqlRestriction("(" + tagStartSql + ") is not null"),
						CriteriaUtil.getClosedIntervalCriterion(from, to, null, tagStartOffsetSql, durationStopOffsetSql))));
		visitScheduleItemCriteria.add(junction);
	} else {
		junction.add(Restrictions.eq("mode", VisitScheduleDateMode.STATIC));
		junction.add(Restrictions.and(Restrictions.eq("mode", VisitScheduleDateMode.TAGS), Restrictions.sqlRestriction("(" + tagStartSql + ") < (" + tagStopSql + ")")));
		junction.add(Restrictions.and(Restrictions.eq("mode", VisitScheduleDateMode.TAG_DURATION), Restrictions.sqlRestriction("(" + tagStartSql + ") is not null")));
	}
	visitScheduleItemCriteria.add(junction); //no stales any more
	LinkedHashMap<String, Projection> sqlColumns = new LinkedHashMap<String, Projection>();
	sqlColumns.put("tagStart", new SQLProjection(
			tagStartOffsetSql + " as tagStart",
			new String[] { "tagStart" },
			new org.hibernate.type.Type[] { Hibernate.TIMESTAMP },
			tagStartOffsetSql));
	sqlColumns.put("tagStop", new SQLProjection(
			tagStopOffsetSql + " as tagStop",
			new String[] { "tagStop" },
			new org.hibernate.type.Type[] { Hibernate.TIMESTAMP },
			tagStopOffsetSql));
	sqlColumns.put("durationStop", new SQLProjection(
			durationStopOffsetSql + " as durationStop",
			new String[] { "durationStop" },
			new org.hibernate.type.Type[] { Hibernate.TIMESTAMP },
			durationStopOffsetSql));
	sqlColumns.put("probandId", new SQLProjection(
			probandIdSql + " as probandId",
			new String[] { "probandId" },
			new org.hibernate.type.Type[] { Hibernate.LONG },
			probandIdSql));
	return sqlColumns;
}
 
 类所在包
 类方法
 同包方法