SimpleStalactiteRepository.java
package org.codefilarete.stalactite.spring.repository;
import java.util.Optional;
import org.codefilarete.stalactite.engine.EntityPersister;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
* Default implementation of the {@link StalactiteRepository} interface.
* Mimics SimpleJpaRepository
*
* @param <C> entity type
* @param <I> identifier type
* @author Guillaume Mary
*/
@Repository
// Adding transaction for all methods of this class. Read-only by default, those which require some write access
// are annotated without readOnly = true
@Transactional(readOnly = true)
public class SimpleStalactiteRepository<C, I> implements StalactiteRepository<C, I> {
private final EntityPersister<C, I> persister;
public SimpleStalactiteRepository(EntityPersister<C, I> persister) {
this.persister = persister;
}
@Transactional
@Override
public <S extends C> S save(S entity) {
persister.persist(entity);
return entity;
}
@Transactional
@Override
public <S extends C> Iterable<S> saveAll(Iterable<S> entities) {
persister.persist(entities);
return entities;
}
@Override
public Iterable<C> findAll() {
return persister.selectAll();
}
@Override
public Optional<C> findById(I id) {
return Optional.ofNullable(persister.select(id));
}
@Override
public Iterable<C> findAllById(Iterable<I> ids) {
return persister.select(ids);
}
@Transactional
@Override
public void delete(C entity) {
persister.delete(entity);
}
@Transactional
@Override
public void deleteAll(Iterable<? extends C> entities) {
persister.delete(entities);
}
}