// ========================================================================
// 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.EntityManager;
import zeroth.framework.enterprise.shared.Persistable;
/**
* データ永続化サービスのファクトリI/F
* @author nilcy
*/
public interface PersistenceServiceFactory {
/**
* 基本データ永続化サービスの作成
* @param manager エンティティマネージャ
* @param clazz エンティティクラス
* @return 基本データ永続化サービスI/F
*/
<E extends Persistable<ID>, ID extends Serializable> SimplePersistenceService<E, ID> createSimplePersistenceService(
EntityManager manager, Class<E> clazz);
/**
* 原紙データ永続化サービスの作成
* @param manager エンティティマネージャ
* @param clazz エンティティクラス
* @return 原紙データ永続化サービスI/F
*/
<E extends Persistable<ID>, ID extends Serializable> NativePersistenceService<E, ID> createNativePersistenceService(
EntityManager manager, Class<E> clazz);
/**
* 標準データ永続化サービスの作成
* @param manager エンティティマネージャ
* @param clazz エンティティクラス
* @return 標準データ永続化サービスI/F
*/
<E extends Persistable<ID>, ID extends Serializable> StandardPersistenceService<E, ID> createStandardPersistenceService(
EntityManager manager, Class<E> clazz);
/**
* 拡張データ永続化サービスの作成
* @param manager エンティティマネージャ
* @param clazz エンティティクラス
* @return 拡張データ永続化サービスI/F
*/
<E extends Persistable<ID>, ID extends Serializable> QueryPersistenceService<E, ID> createQueryPersistenceService(
EntityManager manager, Class<E> clazz);
}