SubQueryMeta.java

package com.github.mygreen.sqlmapper.metamodel.operation;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

import com.github.mygreen.sqlmapper.metamodel.EntityPath;
import com.github.mygreen.sqlmapper.metamodel.OrderSpecifier;
import com.github.mygreen.sqlmapper.metamodel.Predicate;
import com.github.mygreen.sqlmapper.metamodel.PropertyPath;

import lombok.Getter;
import lombok.Setter;

/**
 * クエリの情報を保持するクラス。
 *
 *
 * @author T.TSUCHIE
 */
public class SubQueryMeta {

    /**
     * 抽出対象テーブルのエンティティ
     */
    @Getter
    @Setter
    private EntityPath<?> entityPath;

    /**
     * 検索条件
     */
    @Getter
    @Setter
    private Predicate where;

    /**
     * 取得するレコード数の上限値です。
     * <p>負の値の時は無視します。
     */
    @Getter
    @Setter
    private int limit = -1;

    /**
     * 取得するレコード数の開始位置です。
     * <p>負の値の時は無視します。
     */
    @Getter
    @Setter
    private int offset = -1;

    /**
     * ソート順です。
     */
    @Getter
    private List<OrderSpecifier> orders = new ArrayList<>();

    /**
     * 抽出対象のプロパティです。
     */
    @Getter
    private final Set<PropertyPath<?>> includesProperties = new LinkedHashSet<>();

    public void addOrder(OrderSpecifier... orders) {
        this.orders.addAll(Arrays.asList(orders));
    }

    public void addInclude(PropertyPath<?>... properties) {
        this.includesProperties.addAll(Arrays.asList(properties));
    }

}