alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Hibernate example source code file (DiscriminatorFormulaTest.java)

This example Hibernate source code file (DiscriminatorFormulaTest.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Hibernate tags/keywords

child, child, childentity, childentity, classtypeentity, formula, iterator, list, long, parent, parententity, parententity, test, test, util

The Hibernate DiscriminatorFormulaTest.java source code

package org.hibernate.envers.test.integration.inheritance.single.discriminatorformula;

import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.envers.test.AbstractEntityTest;
import org.hibernate.envers.test.Priority;
import org.hibernate.mapping.Formula;
import org.hibernate.mapping.PersistentClass;
import org.junit.Test;

import javax.persistence.EntityManager;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
 */
public class DiscriminatorFormulaTest extends AbstractEntityTest {
    private PersistentClass parentAudit = null;
    private ChildEntity childVer1 = null;
    private ChildEntity childVer2 = null;
    private ParentEntity parentVer1 = null;
    private ParentEntity parentVer2 = null;

    @Override
    public void configure(Ejb3Configuration cfg) {
        cfg.addAnnotatedClass(ClassTypeEntity.class);
        cfg.addAnnotatedClass(ParentEntity.class);
        cfg.addAnnotatedClass(ChildEntity.class);
    }

    @Test
    @Priority(10)
    public void initData() {
        parentAudit = getCfg().getClassMapping("org.hibernate.envers.test.integration.inheritance.single.discriminatorformula.ParentEntity_AUD");

        EntityManager em = getEntityManager();

        // Child entity type
        em.getTransaction().begin();
        ClassTypeEntity childType = new ClassTypeEntity();
        childType.setType(ClassTypeEntity.CHILD_TYPE);
        em.persist(childType);
        Long childTypeId = childType.getId();
        em.getTransaction().commit();

        // Parent entity type
        em.getTransaction().begin();
        ClassTypeEntity parentType = new ClassTypeEntity();
        parentType.setType(ClassTypeEntity.PARENT_TYPE);
        em.persist(parentType);
        Long parentTypeId = parentType.getId();
        em.getTransaction().commit();

        // Child Rev 1
        em.getTransaction().begin();
        ChildEntity child = new ChildEntity(childTypeId, "Child data", "Child specific data");
        em.persist(child);
        Long childId = child.getId();
        em.getTransaction().commit();

        // Parent Rev 2
        em.getTransaction().begin();
        ParentEntity parent = new ParentEntity(parentTypeId, "Parent data");
        em.persist(parent);
        Long parentId = parent.getId();
        em.getTransaction().commit();

        // Child Rev 3
        em.getTransaction().begin();
        child = em.find(ChildEntity.class, childId);
        child.setData("Child data modified");
        em.getTransaction().commit();

        // Parent Rev 4
        em.getTransaction().begin();
        parent = em.find(ParentEntity.class, parentId);
        parent.setData("Parent data modified");
        em.getTransaction().commit();

        childVer1 = new ChildEntity(childId, childTypeId, "Child data", "Child specific data");
        childVer2 = new ChildEntity(childId, childTypeId, "Child data modified", "Child specific data");
        parentVer1 = new ParentEntity(parentId, parentTypeId, "Parent data");
        parentVer2 = new ParentEntity(parentId, parentTypeId, "Parent data modified");
    }

    @Test
    public void testDiscriminatorFormulaInAuditTable() {
        assert parentAudit.getDiscriminator().hasFormula();
        Iterator iterator = parentAudit.getDiscriminator().getColumnIterator();
        while (iterator.hasNext()) {
            Object o = iterator.next();
            if (o instanceof Formula) {
                Formula formula = (Formula) o;
                assert formula.getText().equals(ParentEntity.DISCRIMINATOR_QUERY);
                return;
            }
        }
        assert false;
    }

    @Test
    public void testRevisionsCounts() {
        assert Arrays.asList(1, 3).equals(getAuditReader().getRevisions(ChildEntity.class, childVer1.getId()));
        assert Arrays.asList(2, 4).equals(getAuditReader().getRevisions(ParentEntity.class, parentVer1.getId()));
    }

    @Test
    public void testHistoryOfParent() {
        assert getAuditReader().find(ParentEntity.class, parentVer1.getId(), 2).equals(parentVer1);
        assert getAuditReader().find(ParentEntity.class, parentVer2.getId(), 4).equals(parentVer2);
    }

    @Test
    public void testHistoryOfChild() {
        assert getAuditReader().find(ChildEntity.class, childVer1.getId(), 1).equals(childVer1);
        assert getAuditReader().find(ChildEntity.class, childVer2.getId(), 3).equals(childVer2);
    }

    @Test
    public void testPolymorphicQuery() {
        assert getAuditReader().createQuery().forEntitiesAtRevision(ChildEntity.class, 1).getSingleResult().equals(childVer1);
        assert getAuditReader().createQuery().forEntitiesAtRevision(ParentEntity.class, 1).getSingleResult().equals(childVer1);

        List childEntityRevisions = getAuditReader().createQuery().forRevisionsOfEntity(ChildEntity.class, true, false).getResultList();
        assert Arrays.asList(childVer1, childVer2).equals(childEntityRevisions);

        List parentEntityRevisions = getAuditReader().createQuery().forRevisionsOfEntity(ParentEntity.class, true, false).getResultList();
        assert Arrays.asList(childVer1, parentVer1, childVer2, parentVer2).equals(parentEntityRevisions);
    }
}

Other Hibernate examples (source code examples)

Here is a short list of links related to this Hibernate DiscriminatorFormulaTest.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.