org.javers.repository.sql.JaversSqlRepository Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javers-persistence-sql Show documentation
Show all versions of javers-persistence-sql Show documentation
JaVers - object auditing and diff framework for Java
package org.javers.repository.sql;
import org.javers.common.exception.JaversException;
import org.javers.common.exception.JaversExceptionCode;
import org.javers.core.commit.Commit;
import org.javers.core.commit.CommitId;
import org.javers.core.json.JsonConverter;
import org.javers.core.metamodel.object.CdoSnapshot;
import org.javers.core.metamodel.object.GlobalId;
import org.javers.core.metamodel.type.EntityType;
import org.javers.core.metamodel.type.ManagedType;
import org.javers.repository.api.JaversRepository;
import org.javers.repository.api.QueryParams;
import org.javers.repository.api.SnapshotIdentifier;
import org.javers.repository.sql.finders.CdoSnapshotFinder;
import org.javers.repository.sql.repositories.CdoSnapshotRepository;
import org.javers.repository.sql.repositories.CommitMetadataRepository;
import org.javers.repository.sql.repositories.GlobalIdRepository;
import org.javers.repository.sql.schema.JaversSchemaManager;
import org.polyjdbc.core.PolyJDBC;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
public class JaversSqlRepository implements JaversRepository {
private final PolyJDBC polyJDBC;
private final CommitMetadataRepository commitRepository;
private final GlobalIdRepository globalIdRepository;
private final CdoSnapshotRepository cdoSnapshotRepository;
private final CdoSnapshotFinder finder;
private final JaversSchemaManager schemaManager;
private final SqlRepositoryConfiguration sqlRepositoryConfiguration;
public JaversSqlRepository(PolyJDBC polyJDBC, CommitMetadataRepository commitRepository, GlobalIdRepository globalIdRepository,
CdoSnapshotRepository cdoSnapshotRepository, CdoSnapshotFinder finder, JaversSchemaManager schemaManager,
SqlRepositoryConfiguration sqlRepositoryConfiguration) {
this.polyJDBC = polyJDBC;
this.commitRepository = commitRepository;
this.globalIdRepository = globalIdRepository;
this.cdoSnapshotRepository = cdoSnapshotRepository;
this.finder = finder;
this.schemaManager = schemaManager;
this.sqlRepositoryConfiguration = sqlRepositoryConfiguration;
}
@Override
public Optional getLatest(GlobalId globalId) {
return finder.getLatest(globalId);
}
@Override
public List getSnapshots(QueryParams queryParams) {
return finder.getSnapshots(queryParams);
}
@Override
public List getSnapshots(Collection snapshotIdentifiers) {
return finder.getSnapshots(snapshotIdentifiers);
}
@Override
public void persist(Commit commit) {
if (commitRepository.isPersisted(commit)) {
throw new JaversException(JaversExceptionCode.CANT_SAVE_ALREADY_PERSISTED_COMMIT, commit.getId());
}
long commitPk = commitRepository.save(commit.getAuthor(), commit.getProperties(), commit.getCommitDate(), commit.getId());
cdoSnapshotRepository.save(commitPk, commit.getSnapshots());
}
@Override
public CommitId getHeadId() {
return commitRepository.getCommitHeadId();
}
@Override
public void setJsonConverter(JsonConverter jsonConverter) {
globalIdRepository.setJsonConverter(jsonConverter);
cdoSnapshotRepository.setJsonConverter(jsonConverter);
finder.setJsonConverter(jsonConverter);
}
@Override
public void ensureSchema() {
schemaManager.ensureSchema();
}
@Override
public List getStateHistory(GlobalId globalId, QueryParams queryParams) {
return finder.getStateHistory(globalId, queryParams);
}
@Override
public List getStateHistory(Set givenClasses, QueryParams queryParams) {
return finder.getStateHistory(givenClasses, queryParams);
}
@Override
public List getValueObjectStateHistory(EntityType ownerEntity, String path, QueryParams queryParams) {
return finder.getVOStateHistory(ownerEntity, path, queryParams);
}
/**
* JaversSqlRepository uses the cache for GlobalId primary keys.
* This cache is non-transactional.
*
*
* If a SQL transaction encounters errors and must be rolled back,
* then cache modifications should be rolled back as well.
*
*
* JaVers does this automatically in JaversTransactionalDecorator
* from javers-spring
module.
* If you are using javers-spring-boot-starter-sql
* (or directly javers-spring
) you don't need to call this method.
*
* @since 2.7.2
*/
public void evictCache() {
globalIdRepository.evictCache();
}
/**
* @since 2.7.2
*/
public int getGlobalIdPkCacheSize(){
return globalIdRepository.getGlobalIdPkCacheSize();
}
/**
* @since 2.7.2
*/
public SqlRepositoryConfiguration getConfiguration() {
return sqlRepositoryConfiguration;
}
/**
* Clears the sequence allocation cache. It can be useful for testing.
* See https://github.com/javers/javers/issues/532
* @since 3.1.1
*/
public void evictSequenceAllocationCache() {
polyJDBC.resetKeyGeneratorCache();
}
}