HHH-7681 - Envers test case.
This commit is contained in:
parent
cc21eeb1af
commit
16fd531b6a
|
@ -0,0 +1,203 @@
|
|||
/*
|
||||
* 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.multiplerelations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToMany;
|
||||
import javax.persistence.OrderColumn;
|
||||
import javax.persistence.Query;
|
||||
|
||||
import org.hibernate.envers.AuditMappedBy;
|
||||
import org.hibernate.envers.Audited;
|
||||
import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
|
||||
import org.hibernate.envers.test.Priority;
|
||||
import org.hibernate.testing.TestForIssue;
|
||||
import org.hibernate.testing.transaction.TransactionUtil;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
/**
|
||||
* @author Chris Cranford
|
||||
*/
|
||||
@TestForIssue(jiraKey = "HHH-7681")
|
||||
public class GroupMemberTest extends BaseEnversJPAFunctionalTestCase {
|
||||
private Integer uniqueGroupId;
|
||||
private Integer groupMemberId;
|
||||
|
||||
@Override
|
||||
protected Class<?>[] getAnnotatedClasses() {
|
||||
return new Class[] { GroupMember.class, MultiGroup.class, UniqueGroup.class };
|
||||
}
|
||||
|
||||
@Test
|
||||
@Priority(10)
|
||||
public void initData() {
|
||||
// Revision 1
|
||||
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> {
|
||||
final UniqueGroup uniqueGroup = new UniqueGroup();
|
||||
final GroupMember groupMember = new GroupMember();
|
||||
uniqueGroup.addMember( groupMember );
|
||||
entityManager.persist( uniqueGroup );
|
||||
entityManager.persist( groupMember );
|
||||
uniqueGroupId = uniqueGroup.getId();
|
||||
groupMemberId = groupMember.getId();
|
||||
} );
|
||||
// Revision 2
|
||||
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> {
|
||||
final GroupMember groupMember = entityManager.find( GroupMember.class, groupMemberId );
|
||||
final MultiGroup multiGroup = new MultiGroup();
|
||||
groupMember.addMultiGroup( multiGroup );
|
||||
entityManager.persist( multiGroup );
|
||||
} );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUniqueGroupFound() {
|
||||
TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> {
|
||||
final GroupMember groupMember = entityManager.find( GroupMember.class, groupMemberId );
|
||||
assertNotNull( groupMember );
|
||||
assertNotNull( groupMember.getUniqueGroup() );
|
||||
} );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUniqueGroupFromAuditHistory() {
|
||||
assertEquals( uniqueGroupId, getCurrentAuditUniqueGroupId() );
|
||||
}
|
||||
|
||||
private Integer getCurrentAuditUniqueGroupId() {
|
||||
return TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> {
|
||||
final Query query = entityManager.createNativeQuery(
|
||||
"SELECT uniqueGroup_id FROM groupmember_aud ORDER BY rev DESC"
|
||||
).setMaxResults( 1 );
|
||||
final Object result = query.getSingleResult();
|
||||
assertNotNull( result );
|
||||
return (Integer) result;
|
||||
} );
|
||||
}
|
||||
|
||||
@Entity(name = "GroupMember")
|
||||
@Audited
|
||||
public static class GroupMember {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Integer id;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "uniqueGroup_id", insertable = false, updatable = false)
|
||||
private UniqueGroup uniqueGroup;
|
||||
|
||||
@ManyToMany(mappedBy = "members")
|
||||
private List<MultiGroup> multiGroups = new ArrayList<>();
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public UniqueGroup getUniqueGroup() {
|
||||
return uniqueGroup;
|
||||
}
|
||||
|
||||
public void setUniqueGroup(UniqueGroup uniqueGroup) {
|
||||
this.uniqueGroup = uniqueGroup;
|
||||
}
|
||||
|
||||
public List<MultiGroup> getMultiGroups() {
|
||||
return multiGroups;
|
||||
}
|
||||
|
||||
public void setMultiGroups(List<MultiGroup> multiGroups) {
|
||||
this.multiGroups = multiGroups;
|
||||
}
|
||||
|
||||
public void addMultiGroup(MultiGroup multiGroup) {
|
||||
this.multiGroups.add( multiGroup );
|
||||
multiGroup.addMember( this );
|
||||
}
|
||||
}
|
||||
|
||||
@Entity(name = "UniqueGroup")
|
||||
@Audited
|
||||
public static class UniqueGroup {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Integer id;
|
||||
|
||||
@OneToMany
|
||||
@JoinColumn(name = "uniqueGroup_id")
|
||||
@AuditMappedBy(mappedBy = "uniqueGroup")
|
||||
private Set<GroupMember> members = new HashSet<>();
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Set<GroupMember> getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(Set<GroupMember> members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
public void addMember(GroupMember groupMember) {
|
||||
this.members.add( groupMember );
|
||||
}
|
||||
}
|
||||
|
||||
@Entity(name = "MultiGroup")
|
||||
@Audited
|
||||
public static class MultiGroup {
|
||||
@Id
|
||||
@GeneratedValue
|
||||
private Integer id;
|
||||
|
||||
@ManyToMany
|
||||
@OrderColumn
|
||||
private List<GroupMember> members = new ArrayList<>();
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public List<GroupMember> getMembers() {
|
||||
return members;
|
||||
}
|
||||
|
||||
public void setMembers(List<GroupMember> members) {
|
||||
this.members = members;
|
||||
}
|
||||
|
||||
public void addMember(GroupMember groupMember) {
|
||||
this.members.add( groupMember );
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue