package org.hibernate.envers.test.integration.proxy;
import org.hibernate.MappingException;
import org.hibernate.envers.test.AbstractSessionTest;
import org.hibernate.envers.test.Priority;
import org.hibernate.envers.test.entities.StrTestEntity;
import org.hibernate.testing.TestForIssue;
import org.junit.Assert;
import org.junit.Test;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.List;
/**
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
*/
public class QueryingWithProxyObjectTest extends AbstractSessionTest {
private Integer id = null;
@Override
protected void initMappings() throws MappingException, URISyntaxException {
config.addAnnotatedClass(StrTestEntity.class);
}
@Test
@Priority(10)
public void initData() {
// Revision 1
getSession().getTransaction().begin();
StrTestEntity ste = new StrTestEntity("data");
getSession().persist(ste);
getSession().getTransaction().commit();
id = ste.getId();
}
@Test
@TestForIssue(jiraKey="HHH-4760")
@SuppressWarnings("unchecked")
public void testQueryingWithProxyObject() {
StrTestEntity originalSte = new StrTestEntity("data", id);
// Load the proxy instance
StrTestEntity proxySte = (StrTestEntity) getSession().load(StrTestEntity.class, id);
Assert.assertTrue(getAuditReader().isEntityClassAudited(proxySte.getClass()));
StrTestEntity ste = getAuditReader().find(proxySte.getClass(), proxySte.getId(), 1);
Assert.assertEquals(originalSte, ste);
List<Number> revisions = getAuditReader().getRevisions(proxySte.getClass(), proxySte.getId());
Assert.assertEquals(Arrays.asList(1), revisions);
List<StrTestEntity> entities = getAuditReader().createQuery().forEntitiesAtRevision(proxySte.getClass(), 1).getResultList();
Assert.assertEquals(Arrays.asList(originalSte), entities);
ste = (StrTestEntity) getAuditReader().createQuery().forRevisionsOfEntity(proxySte.getClass(), true, false).getSingleResult();
Assert.assertEquals(originalSte, ste);
ste = (StrTestEntity) getAuditReader().createQuery().forEntitiesModifiedAtRevision(proxySte.getClass(), 1).getSingleResult();
Assert.assertEquals(originalSte, ste);
}
}