/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.envers.test.integration.naturalid;
import javax.persistence.EntityManager;
import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
import org.hibernate.envers.test.Priority;
import org.hibernate.testing.TestForIssue;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* @author Chris Cranford
*/
@TestForIssue(jiraKey = "HHH-10246")
public class JoinColumnNaturalIdTest extends BaseEnversJPAFunctionalTestCase {
private Integer customerId;
private Integer deviceId;
private Integer accountId;
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[] {
Account.class,
Customer.class,
Device.class
};
}
@Test
@Priority(10)
public void initData() {
EntityManager em = getOrCreateEntityManager();
try {
// Revision 1
em.getTransaction().begin();
Customer customer = new Customer();
customer.setCustomerNumber( "1234567" );
customer.setName( "ACME" );
em.persist( customer );
em.getTransaction().commit();
customerId = customer.getId();
// Revision 2
em.getTransaction().begin();
Device device = new Device();
device.setCustomer( customer );
Account account = new Account();
account.setCustomer( customer );
em.persist( account );
em.persist( device );
em.getTransaction().commit();
accountId = account.getId();
deviceId = device.getId();
// Revision 3
em.getTransaction().begin();
em.remove( account );
em.getTransaction().commit();
}
finally {
em.close();
}
}
@Test
public void testRevisionCounts() {
assertEquals( 3, getAuditReader().getRevisions( Customer.class, customerId ).size() );
assertEquals( 2, getAuditReader().getRevisions( Account.class, accountId ).size() );
assertEquals( 1, getAuditReader().getRevisions( Device.class, deviceId ).size() );
}
@Test
public void testRevisionHistoryOfCustomer() {
final Customer customer = new Customer( customerId, "1234567", "ACME" );
Customer rev1 = getAuditReader().find( Customer.class, customerId, 1 );
assertEquals( customer, rev1 );
final Account account = new Account( accountId, customer );
final Device device = new Device( deviceId, customer );
customer.getAccounts().add( account );
customer.getDevices().add( device );
Customer rev2 = getAuditReader().find( Customer.class, customerId, 2 );
assertEquals( customer, rev2 );
customer.getAccounts().clear();
Customer rev3 = getAuditReader().find( Customer.class, customerId, 3 );
assertEquals( customer, rev3 );
}
}