// ========================================================================
// Copyright (C) zeroth Project Team. All rights reserved.
// GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
// http://www.gnu.org/licenses/agpl-3.0.txt
// ========================================================================
package zeroth.framework.enterprise.infra.persistence;
import java.io.Serializable;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import zeroth.framework.enterprise.shared.Persistable;
import zeroth.framework.standard.shared.Pageable;
/**
* 先進データ永続化サービスI/F(JPA2/CriteriaQuery)
* <p>
* クエリオブジェクト@PofEAA
* </p>
* @param <E> エンティティ型
* @param <ID> 識別子オブジェクト型
* @author nilcy
*/
public interface QueryPersistenceService<E extends Persistable<ID>, ID extends Serializable>
extends SimplePersistenceService<E, ID> {
/**
* 標準ビルダーの取得
* @return 標準ビルダー
*/
CriteriaBuilder builder();
/**
* 標準クエリの取得
* <p>
* まずCriteria-APIを使用して標準クエリを設定する。これがクエリの作成で使用される。
* </p>
* @return 標準クエリ
*/
CriteriaQuery<E> query();
/**
* 標準ルートの取得
* @return 標準ルート
*/
Root<E> root();
/**
* クエリの作成
* @return クエリ
*/
TypedQuery<E> createQuery();
/**
* クエリの作成
* @param pageable ページ条件I/F
* @return クエリ
*/
TypedQuery<E> createQuery(Pageable pageable);
/**
* 件数クエリの作成
* @param expression WHERE句
* @return 件数クエリ
*/
TypedQuery<Long> createCountQuery(Predicate expression);
}