AuditEventRepositoryImpl.java

package com.tradecloud.repository.impl;

import com.tradecloud.domain.model.audit.AuditEvent;
import com.tradecloud.repository.AuditEventRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Repository(value = "auditEventRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class AuditEventRepositoryImpl extends RepositoryBaseImpl<AuditEvent, Object> implements AuditEventRepository {

    @Override
    public void store(AuditEvent auditEvent) {
        saveOrUpdate(auditEvent);
        flush();
    }

    @Override
    public List<AuditEvent> findAllByReferenceAndType(String auditReference, String type) {

        String[] references = new String[] { "auditReference", "type" };
        Object[] values = new Object[] { auditReference, type };

        @SuppressWarnings("unchecked")
        List<AuditEvent> results =
                (List<AuditEvent>) findByNamedParam(
                        "from AuditEvent where auditReference = :auditReference and type = :type order by dateTime asc", references, values);
        return results;
    }

    @Override
    public void deleteByReference(String reference) {
        String queryString = "delete from AuditEvent where auditReference = :auditReference";
        Query query = getCurrentSession().createQuery(queryString);
        query.setParameter("auditReference", reference);
        query.executeUpdate();
    }
}