0

ID、col1、col2、col3、col4、col5 の列を持つテーブルがあります。休止状態の基準制限を次のように追加したい(col1 + col2 + col3) < col4

これらの列にはすべて整数値が含まれます。どうすればこの要件を達成できますか? どんな助けでも感謝します。

4

1 に答える 1

0

これは、カスタマイズされた Criterion を作成することで実現できることがわかりました。以下は、他のユーザーと共有するサンプル コードです。

public class CostomizedExpression implements Criterion {

    private final TypedValue[] NO_TYPED_VALUES = new TypedValue[0];

    private String[] otherColumns;

    private String column;

    private String operator;

    public CostomizedExpression (String operator, String column, String... otherColumns) {
        this.column = column;
        this.otherColumns = otherColumns;
        this.operator = operator;
    }

    @Override
    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, column);
        StringBuffer buffer = new StringBuffer();
        buffer.append("(");
        for (int i = 0; i < otherColumns.length; i++) {
            buffer.append(" ");
            buffer.append(criteriaQuery.getColumnsUsingProjection(criteria, otherColumns[i])[0]);
            if (i < otherColumns.length - 1) {
                buffer.append("+");
            }
            buffer.append(" ");
        }

        buffer.append(" )");
        buffer.append(operator);
        buffer.append(" ");
        buffer.append(columns[0]);
        return buffer.toString();
    }

    @Override
    public TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        return NO_TYPED_VALUES;
    }

    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < otherColumns.length; i++) {
            buffer.append(" ");
            buffer.append(otherColumns[i]);
            if (i < otherColumns.length - 1) {
                buffer.append("+");
            }
            buffer.append(" ");
        }

        buffer.append(" ");
        buffer.append(operator);
        buffer.append(" ");
        buffer.append(column);
        return buffer.toString();
    }
}
于 2013-05-15T03:15:58.593 に答える