/**
* Copyright (c) 2015, Lucee Assosication Switzerland. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
*/
package lucee.runtime.orm;
import lucee.runtime.Component;
import lucee.runtime.PageContext;
import lucee.runtime.db.DataSource;
import lucee.runtime.exp.PageException;
import lucee.runtime.type.Array;
import lucee.runtime.type.Query;
import lucee.runtime.type.Struct;
public interface ORMSession {
/**
* flush all elements in all sessions (for all datasources)
*
* @param pc
* @throws PageException
*/
public void flushAll(PageContext pc) throws PageException;
/**
* flush all elements in the default sessions
*
* @param pc
* @throws PageException
*/
public void flush(PageContext pc) throws PageException;
/**
* flush all elements in a specific sessions defined by datasource name
*
* @param pc
* @throws PageException
*/
public void flush(PageContext pc, String datasource) throws PageException;
/**
* delete elememt from datasource
*
* @param pc
* @param obj
* @throws PageException
*/
public void delete(PageContext pc, Object obj) throws PageException;
/**
* insert entity into datasource, even the entry already exist
*
* @param pc
* @param obj
* @param forceInsert
* @throws PageException
*/
public void save(PageContext pc, Object obj, boolean forceInsert)
throws PageException;
/**
* Reloads data for an entity that is already loaded. This method refetches
* data from the database and repopulates the entity with the refreshed
* data.
*
* @param obj
*/
public void reload(PageContext pc, Object obj) throws PageException;
/**
* creates a entity matching the given name
*
* @param entityName
* @return
*/
public Component create(PageContext pc, String entityName)
throws PageException;
/**
* Attaches the specified entity to the current ORM session. It copies the
* state of the given object onto the persistent object with the same
* identifier and returns the persistent object.
* If there is no persistent instance currently associated with the session,
* it is loaded. The given instance is not associated with the session. User
* have to use the returned object from this session.
*
* @param pc
* @param obj
* @throws PageException
*/
public Component merge(PageContext pc, Object obj) throws PageException;
/**
* clear all elements in the default sessions
*
* @param pc
* @throws PageException
*/
public void clear(PageContext pc) throws PageException;
/**
* clear all elements in a specific sessions defined by datasource name
*
* @param pc
* @param dataSource
* @throws PageException
*/
public void clear(PageContext pc, String dataSource) throws PageException;
/**
* load and return a Object that match given filter, if there is more than
* one Object matching the filter, only the first Object is returned
*
* @param name
* @param filter
* @return
*/
public Component load(PageContext pc, String name, Struct filter)
throws PageException;
public Query toQuery(PageContext pc, Object obj, String name)
throws PageException;
/**
* load and return a Object that match given id, if there is more than one
* Object matching the id, only the first Object is returned
*
* @param name
* @param id
*/
public Component load(PageContext pc, String name, String id)
throws PageException;
/**
* load and return a array of Objects matching given filter
*
* @param name
* @param filter
* @return
*/
public Array loadAsArray(PageContext pc, String name, Struct filter)
throws PageException;
/**
* load and return a array of Objects matching given filter
*
* @param name
* @param filter
* @param options
* @return
*/
public Array loadAsArray(PageContext pc, String name, Struct filter,
Struct options) throws PageException;
/**
* @param pc
* @param name
* @param filter
* @param options
* @param order
* @return
* @throws PageException
*/
public Array loadAsArray(PageContext pc, String name, Struct filter,
Struct options, String order) throws PageException;
/**
* load and return a array of Objects matching given id
*
* @param name
* @param id
*/
public Array loadAsArray(PageContext pc, String name, String id)
throws PageException;
/**
* @param pc
* @param name
* @param id
* @param order
* @return
* @throws PageException
*/
public Array loadAsArray(PageContext pc, String name, String id,
String order) throws PageException;
/**
* load and return a array of Objects matching given sampleEntity
*
* @param pc
* @param obj
*/
public Array loadByExampleAsArray(PageContext pc, Object obj)
throws PageException;
/**
* load and return a Object that match given sampleEntity, if there is more
* than one Object matching the id, only the first Object is returned
*
* @param pc
* @param obj
*/
public Component loadByExample(PageContext pc, Object obj)
throws PageException;
public void evictCollection(PageContext pc, String entity, String collection)
throws PageException;
public void evictCollection(PageContext pc, String entity,
String collection, String id) throws PageException;
public void evictEntity(PageContext pc, String entity) throws PageException;
public void evictEntity(PageContext pc, String entity, String id)
throws PageException;
public void evictQueries(PageContext pc) throws PageException;
public void evictQueries(PageContext pc, String cacheName)
throws PageException;
public void evictQueries(PageContext pc, String cacheName, String datasource)
throws PageException;
public Object executeQuery(PageContext pc, String dataSourceName,
String hql, Array params, boolean unique, Struct queryOptions)
throws PageException;
public Object executeQuery(PageContext pc, String dataSourceName,
String hql, Struct params, boolean unique, Struct queryOptions)
throws PageException;
/**
* close all elements in all sessions
*
* @param pc
* @throws PageException
*/
public void closeAll(PageContext pc) throws PageException;
/**
* close all elements in the default sessions
*
* @param pc
* @throws PageException
*/
public void close(PageContext pc) throws PageException;
/**
* close all elements in a specific sessions defined by datasource name
*
* @param pc
* @param datasource
* @throws PageException
*/
public void close(PageContext pc, String datasource) throws PageException;
/**
* is session valid or not
*
* @return is session valid
*/
public boolean isValid(DataSource ds);
public boolean isValid();
/**
* engine from session
*
* @return engine
*/
public ORMEngine getEngine();
public Object getRawSession(String dataSourceName) throws PageException;
public Object getRawSessionFactory(String dataSourceName)
throws PageException;
public ORMTransaction getTransaction(String dataSourceName,
boolean autoManage) throws PageException;
public String[] getEntityNames();
public DataSource[] getDataSources();
}