EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() ); assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() ); SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass() ); OptimizerFactory.HiLoOptimizer optimizer = ( OptimizerFactory.HiLoOptimizer ) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[ increment + 1 ]; Session s = openSession(); s.beginTransaction(); for ( int i = 0; i < increment; i++ ) { entities[i] = new Entity( "" + ( i + 1 ) ); s.save( entities[i] ); assertEquals( 1, generator.getDatabaseStructure().getTimesAccessed() ); // initialization assertEquals( 1, optimizer.getLastSourceValue() ); // initialization assertEquals( i + 1, optimizer.getLastValue() ); assertEquals( increment + 1, optimizer.getHiValue() ); } // now force a "clock over" entities[ increment ] = new Entity( "" + increment ); s.save( entities[ increment ] ); assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization assertEquals( 2, optimizer.getLastSourceValue() ); // initialization assertEquals( increment + 1, optimizer.getLastValue() ); assertEquals( ( increment * 2 ) + 1, optimizer.getHiValue() ); s.getTransaction().commit(); s.beginTransaction(); for ( int i = 0; i < entities.length; i++ ) { assertEquals( i + 1, entities[i].getId().intValue() ); s.delete( entities[i] ); } s.getTransaction().commit(); s.close();
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() ); assertClassAssignability( TableGenerator.class, persister.getIdentifierGenerator().getClass() ); TableGenerator generator = ( TableGenerator ) persister.getIdentifierGenerator(); assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass() ); OptimizerFactory.HiLoOptimizer optimizer = ( OptimizerFactory.HiLoOptimizer ) generator.getOptimizer(); int increment = optimizer.getIncrementSize(); Entity[] entities = new Entity[ increment + 1 ]; Session s = openSession(); s.beginTransaction(); for ( int i = 0; i < increment; i++ ) { entities[i] = new Entity( "" + ( i + 1 ) ); s.save( entities[i] ); assertEquals( 1, generator.getTableAccessCount() ); // initialization assertEquals( 1, optimizer.getLastSourceValue() ); // initialization assertEquals( i + 1, optimizer.getLastValue() ); assertEquals( increment + 1, optimizer.getHiValue() ); } // now force a "clock over" entities[ increment ] = new Entity( "" + increment ); s.save( entities[ increment ] ); assertEquals( 2, generator.getTableAccessCount() ); // initialization assertEquals( 2, optimizer.getLastSourceValue() ); // initialization assertEquals( increment + 1, optimizer.getLastValue() ); assertEquals( ( increment * 2 ) + 1, optimizer.getHiValue() ); s.getTransaction().commit(); s.beginTransaction(); for ( int i = 0; i < entities.length; i++ ) { assertEquals( i + 1, entities[i].getId().intValue() ); s.delete( entities[i] ); } s.getTransaction().commit(); s.close();
Clone fragments detected by clone detection tool
File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/idgen/enhanced/sequence/HiLoSequenceTest.java File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/idgen/enhanced/table/HiLoTableTest.java
Method name: void testNormalBoundary() Method name: void testNormalBoundary()
Number of AST nodes: 29 Number of AST nodes: 29
1
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() );
1
EntityPersister persister = sfi().getEntityPersister( Entity.class.getName() );
2
		assertClassAssignability( SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass() );
2
		assertClassAssignability( TableGenerator.class, persister.getIdentifierGenerator().getClass() );
3
		SequenceStyleGenerator generator = ( SequenceStyleGenerator ) persister.getIdentifierGenerator();
3
		TableGenerator generator = ( TableGenerator ) persister.getIdentifierGenerator();
4
		assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass() );
4
		assertClassAssignability( OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass() );
5
		OptimizerFactory.HiLoOptimizer optimizer = ( OptimizerFactory.HiLoOptimizer ) generator.getOptimizer();
5
		OptimizerFactory.HiLoOptimizer optimizer = ( OptimizerFactory.HiLoOptimizer ) generator.getOptimizer();
6
		int increment = optimizer.getIncrementSize();
6
		int increment = optimizer.getIncrementSize();
7
		Entity[] entities = new Entity[ increment + 1 ];
7
		Entity[] entities = new Entity[ increment + 1 ];
8
		Session s = openSession();
8
		Session s = openSession();
9
		s.beginTransaction();
9
		s.beginTransaction();
10
		for ( int i = 0; i < increment; i++ ) {
10
		for ( int i = 0; i < increment; i++ ) {
11
			entities[i] = new Entity( "" + ( i + 1 ) );
11
			entities[i] = new Entity( "" + ( i + 1 ) );
12
			s.save( entities[i] );
12
			s.save( entities[i] );
13
			assertEquals( 1, generator.getDatabaseStructure().getTimesAccessed() ); // initialization
13
			assertEquals( 1, generator.getTableAccessCount() ); // initialization
14
			assertEquals( 1, optimizer.getLastSourceValue() ); // initialization
14
			assertEquals( 1, optimizer.getLastSourceValue() ); // initialization
15
			assertEquals( i + 1, optimizer.getLastValue() );
15
			assertEquals( i + 1, optimizer.getLastValue() );
16
			assertEquals( increment + 1, optimizer.getHiValue() );
16
			assertEquals( increment + 1, optimizer.getHiValue() );
17
		}
17
		}
18
		// now force a "clock over"
18
		// now force a "clock over"
19
		entities[ increment ] = new Entity( "" + increment );
19
		entities[ increment ] = new Entity( "" + increment );
20
		s.save( entities[ increment ] );
20
		s.save( entities[ increment ] );
21
		assertEquals( 2, generator.getDatabaseStructure().getTimesAccessed() ); // initialization
21
		assertEquals( 2, generator.getTableAccessCount() ); // initialization
22
		assertEquals( 2, optimizer.getLastSourceValue() ); // initialization
22
		assertEquals( 2, optimizer.getLastSourceValue() ); // initialization
23
		assertEquals( increment + 1, optimizer.getLastValue() );
23
		assertEquals( increment + 1, optimizer.getLastValue() );
24
		assertEquals( ( increment * 2 ) + 1, optimizer.getHiValue() );
24
		assertEquals( ( increment * 2 ) + 1, optimizer.getHiValue() );
25
		s.getTransaction().commit();
25
		s.getTransaction().commit();
26
		s.beginTransaction();
26
		s.beginTransaction();
27
		for ( int i = 0; i < entities.length; i++ ) {
27
		for ( int i = 0; i < entities.length; i++ ) {
28
			assertEquals( i + 1, entities[i].getId().intValue() );
28
			assertEquals( i + 1, entities[i].getId().intValue() );
29
			s.delete( entities[i] );
29
			s.delete( entities[i] );
30
		}
30
		}
31
		s.getTransaction().commit();
31
		s.getTransaction().commit();
32
		s.close();
32
		s.close();
Summary
Number of common nesting structure subtrees1
Number of refactorable cases0
Number of non-refactorable cases1
Time elapsed for finding largest common nesting structure subtrees (ms)0.5
Clones locationClones are in different classes having the same super class
Number of node comparisons313
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements27
    Number of unmapped statements in the first code fragment2
    Number of unmapped statements in the second code fragment2
    Time elapsed for statement mapping (ms)13.4
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
    1
    EntityPersister persister = sfi().getEntityPersister(Entity.class.getName());
    1
    EntityPersister persister = sfi().getEntityPersister(Entity.class.getName());
    2
    assertClassAssignability(SequenceStyleGenerator.class, persister.getIdentifierGenerator().getClass());
    2
    assertClassAssignability(TableGenerator.class, persister.getIdentifierGenerator().getClass());
    3
    SequenceStyleGenerator generator = (SequenceStyleGenerator)persister.getIdentifierGenerator();
    3
    TableGenerator generator = (TableGenerator)persister.getIdentifierGenerator();
    4
    assertClassAssignability(OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass());
    4
    assertClassAssignability(OptimizerFactory.HiLoOptimizer.class, generator.getOptimizer().getClass());
    5
    OptimizerFactory.HiLoOptimizer optimizer = (OptimizerFactory.HiLoOptimizer)generator.getOptimizer();
    5
    OptimizerFactory.HiLoOptimizer optimizer = (OptimizerFactory.HiLoOptimizer)generator.getOptimizer();
    6
    int increment = optimizer.getIncrementSize();
    6
    int increment = optimizer.getIncrementSize();
    7
    Entity[] entities = new Entity[increment + 1];
    7
    Entity[] entities = new Entity[increment + 1];
    8
    Session s = openSession();
    8
    Session s = openSession();
    9
    s.beginTransaction();
    9
    s.beginTransaction();
    10
    for (int i = 0; i < increment; i++)
    10
    for (int i = 0; i < increment; i++)
    11
    entities[i] = new Entity("" + (i + 1));
    11
    entities[i] = new Entity("" + (i + 1));
    12
    s.save(entities[i]);
    12
    s.save(entities[i]);
                                                                                                            
    13
    assertEquals(1, generator.getTableAccessCount());
    13
    assertEquals(1, generator.getDatabaseStructure().getTimesAccessed());
                                                                                                                                                    
    14
    assertEquals(1, optimizer.getLastSourceValue());
    14
    assertEquals(1, optimizer.getLastSourceValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    15
    assertEquals(i + 1, optimizer.getLastValue());
    16
    assertEquals(increment + 1, optimizer.getHiValue());
    16
    assertEquals(increment + 1, optimizer.getHiValue());
    17
    entities[increment] = new Entity("" + increment);
    17
    entities[increment] = new Entity("" + increment);
    18
    s.save(entities[increment]);
    18
    s.save(entities[increment]);
                                                                                                            
    19
    assertEquals(2, generator.getTableAccessCount());
    19
    assertEquals(2, generator.getDatabaseStructure().getTimesAccessed());
                                                                                                                                                    
    20
    assertEquals(2, optimizer.getLastSourceValue());
    20
    assertEquals(2, optimizer.getLastSourceValue());
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    21
    assertEquals(increment + 1, optimizer.getLastValue());
    22
    assertEquals((increment * 2) + 1, optimizer.getHiValue());
    22
    assertEquals((increment * 2) + 1, optimizer.getHiValue());
    23
    s.getTransaction().commit();
    23
    s.getTransaction().commit();
    24
    s.beginTransaction();
    24
    s.beginTransaction();
    25
    for (int i = 0; i < entities.length; i++)
    25
    for (int i = 0; i < entities.length; i++)
    26
    assertEquals(i + 1, entities[i].getId().intValue());
    26
    assertEquals(i + 1, entities[i].getId().intValue());
    27
    s.delete(entities[i]);
    27
    s.delete(entities[i]);
    28
    s.getTransaction().commit();
    28
    s.getTransaction().commit();
    29
    s.close();
    29
    s.close();
    Precondition Violations (1)
    Row Violation
    1Clone fragment #1 returns variable generator with type org.hibernate.id.enhanced.SequenceStyleGenerator , while Clone fragment #2 returns variable generator with type org.hibernate.id.enhanced.TableGenerator