HHH-8973 - Added test case.
This commit is contained in:
parent
0693b54256
commit
ad0cd4fc18
|
@ -0,0 +1,186 @@
|
||||||
|
/*
|
||||||
|
* 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.modifiedflags;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.envers.Audited;
|
||||||
|
import org.hibernate.envers.query.AuditEntity;
|
||||||
|
import org.hibernate.envers.test.BaseEnversFunctionalTestCase;
|
||||||
|
import org.hibernate.envers.test.Priority;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that an updated detached entity will still properly track {@code withModifiedFlag}
|
||||||
|
* values correctly rather than always triggering that a field was modified so that both a
|
||||||
|
* detached and attached entity result in the same {@code withModifiedFlag} settings.
|
||||||
|
*
|
||||||
|
* @author Chris Cranford
|
||||||
|
*/
|
||||||
|
@TestForIssue(jiraKey = "HHH-8973")
|
||||||
|
public class DetachedEntityTest extends BaseEnversFunctionalTestCase {
|
||||||
|
@Override
|
||||||
|
protected Class[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] { Project.class };
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Priority(10)
|
||||||
|
public void initData() {
|
||||||
|
final Session s = openSession();
|
||||||
|
try {
|
||||||
|
// revision 1 - persist the project entity
|
||||||
|
s.getTransaction().begin();
|
||||||
|
final Project project = new Project( 1, "fooName" );
|
||||||
|
s.persist( project );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
|
||||||
|
// detach the project entity
|
||||||
|
s.clear();
|
||||||
|
|
||||||
|
// revision 2 to 6 - update the detached project entity.
|
||||||
|
for( int i = 0; i < 5; ++i ) {
|
||||||
|
s.getTransaction().begin();
|
||||||
|
project.setName( "fooName" + ( i + 2 ) );
|
||||||
|
s.update( project );
|
||||||
|
s.getTransaction().commit();
|
||||||
|
s.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch ( Throwable t ) {
|
||||||
|
if ( s.getTransaction().isActive() ) {
|
||||||
|
s.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
throw t;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRevisionCounts() {
|
||||||
|
assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), getAuditReader().getRevisions( Project.class, 1 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRevisionHistory() {
|
||||||
|
for ( Integer revision : Arrays.asList( 1, 2, 3, 4, 5, 6 ) ) {
|
||||||
|
final Project project = getAuditReader().find( Project.class, 1, revision );
|
||||||
|
if ( revision == 1 ) {
|
||||||
|
assertEquals( new Project( 1, "fooName" ), project );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assertEquals( new Project( 1, "fooName" + revision ), project );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testModifiedFlagChangesForProjectType() {
|
||||||
|
final List results = getAuditReader().createQuery()
|
||||||
|
.forRevisionsOfEntity( Project.class, false, true )
|
||||||
|
.add( AuditEntity.property( "type" ).hasChanged() )
|
||||||
|
.addProjection( AuditEntity.revisionNumber() )
|
||||||
|
.getResultList();
|
||||||
|
assertEquals( Arrays.asList( 1 ), results );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testModifiedFlagChangesForProjectName() {
|
||||||
|
final List results = getAuditReader().createQuery()
|
||||||
|
.forRevisionsOfEntity( Project.class, false, true )
|
||||||
|
.add( AuditEntity.property( "name" ).hasChanged() )
|
||||||
|
.addProjection( AuditEntity.revisionNumber() )
|
||||||
|
.getResultList();
|
||||||
|
assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), results );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity(name = "Project")
|
||||||
|
@Audited(withModifiedFlag = true)
|
||||||
|
public static class Project {
|
||||||
|
@Id
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
Project() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Project(Integer id, String name) {
|
||||||
|
this( id, name, "fooType" );
|
||||||
|
}
|
||||||
|
|
||||||
|
Project(Integer id, String name, String type) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if ( this == o ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ( o == null || getClass() != o.getClass() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Project project = (Project) o;
|
||||||
|
|
||||||
|
if ( id != null ? !id.equals( project.id ) : project.id != null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ( name != null ? !name.equals( project.name ) : project.name != null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return type != null ? type.equals( project.type ) : project.type == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = id != null ? id.hashCode() : 0;
|
||||||
|
result = 31 * result + ( name != null ? name.hashCode() : 0 );
|
||||||
|
result = 31 * result + ( type != null ? type.hashCode() : 0 );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue