Class BibernateFirstLevelCacheSession
java.lang.Object
io.github.blyznytsiaorg.bibernate.session.BibernateFirstLevelCacheSession
- All Implemented Interfaces:
BibernateSession,Closeable,AutoCloseable
BibernateFirstLevelCacheSession is an implementation of the BibernateSession interface
that introduces a first-level cache to improve the performance of entity retrieval operations.
It wraps an existing BibernateSession and maintains a first-level cache along with snapshots
for dirty checking. This class intercepts various session operations, manages the cache,
and delegates the actual database interactions to the underlying BibernateSession.
The first-level cache stores entities in-memory, allowing for quick retrieval without repeated database queries. Snapshots are used for dirty checking, identifying changes in entities and triggering necessary updates to the database.
This class is part of the Bibernate framework and supports common CRUD operations, query executions, and transaction management.
- Since:
- 1.0
- Author:
- Blyzhnytsia Team
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ActionQueueprivate final BibernateSessionprivate final Map<EntityKey<?>, List<ColumnSnapshot>> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidaddToQueueOrExecute(Runnable addToQueue, Runnable execute) private List<ColumnSnapshot> buildEntitySnapshot(Object entity) private voidvoidclose()Closes the session, releasing any resources associated with it.voidCommits the current transaction.<T> voidDeletes an entity from the data store.<T> voiddeleteAll(Class<T> entityClass, Collection<T> entities) Deletes all records associated with the provided entities from the specified table.<T> voiddeleteAllById(Class<T> entityClass, Collection<Object> primaryKeys) Deletes records from the specified table based on the provided collection of primary key values.<T> List<T> deleteByColumnValue(Class<T> entityClass, String columnName, Object columnValue) Deletes records from the specified table where the value in the specified column matches the given criteria.<T> voiddeleteById(Class<T> entityClass, Object primaryKey) Deletes an entity from the data store by its primary key.intFinds the number of records returned by a custom query.<T> List<T> Retrieves all entities of a specified type from the data store.<T> List<T> findAllByColumnValue(Class<T> entityClass, String columnName, Object columnValue) Finds all entities of a given class with a specified column value.<T> List<T> findAllById(Class<T> entityClass, Collection<Object> primaryKeys) Retrieves entities based on a collection of primary keys.<T> Optional<T> Finds an entity by its primary key.<T> List<T> findByJoinTableField(Class<T> entityClass, Field field, Object... bindValues) Finds entities of a given class based on a join table field.<T> List<T> findByQuery(Class<T> entityClass, String query, Object[] bindValues) Finds entities of a given class based on a custom query.<T> List<T> findByWhere(Class<T> entityClass, String whereQuery, Object[] bindValues) Finds entities of a given class based on a custom WHERE clause.<T> Optional<T> findByWhereJoin(Class<T> entityClass, Object[] bindValues) voidflush()Flushes changes to the underlying database.getDao()Gets the Data Access Object (DAO) associated with this session.private voidprivate <T> TpersistentContext(Class<?> entityClass, T entityFromDb, EntityKey<?> entityKey, Object finalPrimaryKey) private <T> voidpersistentContext(Class<T> entityClass, List<T> entities) private <T> EntityActionprepareDeleteByIdEntityAction(Class<T> entityClass, Object primaryKey, EntityKey<T> entityKey) private <T> EntityKey<T> prepareEntityKey(Class<T> entityClass, Object primaryKey) private voidremoveCacheAndSnapshotBy(EntityKey<?> entityKey) private <T> voidremoveCacheAndSnapshotBy(Collection<EntityKey<T>> entityKeys, Class<T> entityClass, Collection<Object> primaryKeys) voidRolls back the current transaction.<T> TSaves an entity to the data store.<T> voidsaveAll(Class<T> entityClass, Collection<T> entities) Saves a collection of entities into the specified table.voidStarts a new transaction.<T> voidUpdates an entity in the data store.private <T> voidupdate(Class<T> entityClass, Object entity, List<ColumnSnapshot> diff)
-
Field Details
-
bibernateSession
-
actionQueue
-
firstLevelCache
-
snapshots
-
-
Constructor Details
-
BibernateFirstLevelCacheSession
public BibernateFirstLevelCacheSession()
-
-
Method Details
-
findById
Description copied from interface:BibernateSessionFinds an entity by its primary key.- Specified by:
findByIdin interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityprimaryKey- the primary key of the entity- Returns:
- an Optional containing the found entity, or empty if not found
-
findAll
Description copied from interface:BibernateSessionRetrieves all entities of a specified type from the data store.- Specified by:
findAllin interfaceBibernateSession- Type Parameters:
T- The generic type representing the entity class.- Parameters:
entityClass- The class of the entity.- Returns:
- A list of all entities of the specified type in the data store.
-
findAllById
Description copied from interface:BibernateSessionRetrieves entities based on a collection of primary keys.- Specified by:
findAllByIdin interfaceBibernateSession- Type Parameters:
T- The generic type representing the entity class.- Parameters:
entityClass- The class of the entity.primaryKeys- A collection of primary keys for identifying and retrieving specific records.- Returns:
- A list of entities matching the provided collection of primary keys.
-
findAllByColumnValue
public <T> List<T> findAllByColumnValue(Class<T> entityClass, String columnName, Object columnValue) Description copied from interface:BibernateSessionFinds all entities of a given class with a specified column value.- Specified by:
findAllByColumnValuein interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entitycolumnName- the name of the column to matchcolumnValue- the value to match- Returns:
- a list of entities matching the criteria
-
findByWhere
Description copied from interface:BibernateSessionFinds entities of a given class based on a custom WHERE clause.- Specified by:
findByWherein interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entitywhereQuery- the WHERE clause to applybindValues- values to bind to the query parameters- Returns:
- a list of entities matching the criteria
-
findByJoinTableField
Description copied from interface:BibernateSessionFinds entities of a given class based on a join table field.- Specified by:
findByJoinTableFieldin interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityfield- the field to join onbindValues- values to bind to the query parameters- Returns:
- a list of entities matching the criteria
-
findByWhereJoin
- Specified by:
findByWhereJoinin interfaceBibernateSession
-
findByQuery
Description copied from interface:BibernateSessionFinds entities of a given class based on a custom query.- Specified by:
findByQueryin interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityquery- the custom query to executebindValues- values to bind to the query parameters- Returns:
- a list of entities matching the criteria
-
update
Description copied from interface:BibernateSessionUpdates an entity in the data store.- Specified by:
updatein interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityentity- the entity to update
-
find
Description copied from interface:BibernateSessionFinds the number of records returned by a custom query.- Specified by:
findin interfaceBibernateSession- Parameters:
query- the custom query to executebindValues- values to bind to the query parameters- Returns:
- the number of records returned by the query
-
save
Description copied from interface:BibernateSessionSaves an entity to the data store.- Specified by:
savein interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityentity- the entity to save- Returns:
- the saved entity
-
saveAll
Description copied from interface:BibernateSessionSaves a collection of entities into the specified table.- Specified by:
saveAllin interfaceBibernateSession- Type Parameters:
T- The generic type representing the entity class.- Parameters:
entityClass- The Class object representing the type of entities to be saved.entities- A collection of entities to be persisted into the database.
-
deleteById
Description copied from interface:BibernateSessionDeletes an entity from the data store by its primary key.- Specified by:
deleteByIdin interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityprimaryKey- the primary key of the entity to delete
-
deleteAllById
Description copied from interface:BibernateSessionDeletes records from the specified table based on the provided collection of primary key values.- Specified by:
deleteAllByIdin interfaceBibernateSession- Type Parameters:
T- The generic type representing the entity class.- Parameters:
entityClass- The Class object representing the type of entities for which records will be deleted.primaryKeys- A collection of primary key values identifying the records to be deleted.
-
deleteByColumnValue
Description copied from interface:BibernateSessionDeletes records from the specified table where the value in the specified column matches the given criteria.- Specified by:
deleteByColumnValuein interfaceBibernateSession- Type Parameters:
T- The generic type representing the entity class.- Parameters:
entityClass- The Class object representing the type of entities for which records will be deleted.columnName- The name of the column used in the WHERE condition for deletion.columnValue- The value to match in the specified column for deletion.- Returns:
- A list of entities of type T that were deleted from the table.
-
delete
Description copied from interface:BibernateSessionDeletes an entity from the data store.- Specified by:
deletein interfaceBibernateSession- Type Parameters:
T- the type of the entity- Parameters:
entityClass- the class of the entityentity- the entity to delete
-
deleteAll
Description copied from interface:BibernateSessionDeletes all records associated with the provided entities from the specified table.- Specified by:
deleteAllin interfaceBibernateSession- Type Parameters:
T- The generic type representing the entity class.- Parameters:
entityClass- The Class object representing the type of entities to be deleted.entities- A collection of entities whose corresponding records will be deleted.
-
flush
public void flush()Description copied from interface:BibernateSessionFlushes changes to the underlying database. This method synchronizes the state of the Bibernate session with the database. Any changes that have been queued for insertion, update, or deletion are executed immediately.- Specified by:
flushin interfaceBibernateSession
-
close
public void close()Description copied from interface:BibernateSessionCloses the session, releasing any resources associated with it.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceBibernateSession- Specified by:
closein interfaceCloseable
-
getDao
Description copied from interface:BibernateSessionGets the Data Access Object (DAO) associated with this session.- Specified by:
getDaoin interfaceBibernateSession- Returns:
- the DAO instance
-
startTransaction
Description copied from interface:BibernateSessionStarts a new transaction. This method should be called before any operations that are meant to be part of a transaction.- Specified by:
startTransactionin interfaceBibernateSession- Throws:
SQLException- if a database access error occurs or this method is called on a closed connection
-
commitTransaction
Description copied from interface:BibernateSessionCommits the current transaction. This method should be called to make all changes made within the transaction permanent.- Specified by:
commitTransactionin interfaceBibernateSession- Throws:
SQLException- if a database access error occurs, the connection is closed or this method is called when no transaction is active
-
rollbackTransaction
Description copied from interface:BibernateSessionRolls back the current transaction. This method should be called if any errors occur within the transaction and the changes made need to be discarded.- Specified by:
rollbackTransactionin interfaceBibernateSession- Throws:
SQLException- if a database access error occurs, the connection is closed or this method is called when no transaction is active
-
buildEntitySnapshot
-
update
-
performDirtyChecking
private void performDirtyChecking() -
prepareDeleteByIdEntityAction
private <T> EntityAction prepareDeleteByIdEntityAction(Class<T> entityClass, Object primaryKey, EntityKey<T> entityKey) -
persistentContext
-
persistentContext
-
clearCacheAndSnapshots
private void clearCacheAndSnapshots() -
removeCacheAndSnapshotBy
-
removeCacheAndSnapshotBy
private <T> void removeCacheAndSnapshotBy(Collection<EntityKey<T>> entityKeys, Class<T> entityClass, Collection<Object> primaryKeys) -
prepareEntityKey
-
addToQueueOrExecute
-