Session s = openSession(); Transaction t = s.beginTransaction(); Employee mark = new Employee(); mark.setName("Mark"); mark.setTitle("internal sales"); mark.setSex('M'); mark.setAddress("buckhead"); mark.setZip("30305"); mark.setCountry("USA"); Customer joe = new Customer(); joe.setName("Joe"); joe.setAddress("San Francisco"); joe.setZip("XXXXX"); joe.setCountry("USA"); joe.setComments("Very demanding"); joe.setSex('M'); joe.setSalesperson(mark); Person yomomma = new Person(); yomomma.setName("mum"); yomomma.setSex('F'); s.save(yomomma); s.save(mark); s.save(joe); assertEquals( s.createQuery("from java.io.Serializable").list().size(), 0 ); assertEquals( s.createQuery("from Person").list().size(), 3 ); assertEquals( s.createQuery("from Person p where p.class = Customer").list().size(), 1 ); assertEquals( s.createQuery("from Person p where p.class = Person").list().size(), 1 ); s.clear(); List customers = s.createQuery("from Customer c left join fetch c.salesperson").list(); for ( Iterator iter = customers.iterator(); iter.hasNext(); ) { Customer c = (Customer) iter.next(); assertTrue( Hibernate.isInitialized( c.getSalesperson() ) ); assertEquals( c.getSalesperson().getName(), "Mark" ); } assertEquals( customers.size(), 1 ); s.clear(); customers = s.createQuery("from Customer").list(); for ( Iterator iter = customers.iterator(); iter.hasNext(); ) { Customer c = (Customer) iter.next(); assertFalse( Hibernate.isInitialized( c.getSalesperson() ) ); assertEquals( c.getSalesperson().getName(), "Mark" ); } assertEquals( customers.size(), 1 ); s.clear(); mark = (Employee) s.get( Employee.class, new Long( mark.getId() ) ); joe = (Customer) s.get( Customer.class, new Long( joe.getId() ) ); mark.setZip("30306"); assertEquals( s.createQuery("from Person p where p.address.zip = '30306'").list().size(), 1 ); if ( supportsRowValueConstructorSyntaxInInList() ) { s.createCriteria(Person.class).add( Restrictions.in("address", new Address[] { mark.getAddress(), joe.getAddress() } ) ).list(); } s.delete(mark); s.delete(joe); s.delete(yomomma); assertTrue( s.createQuery("from Person").list().isEmpty() ); t.commit(); s.close();
Session s = openSession(); Transaction t = s.beginTransaction(); Employee mark = new Employee(); mark.setName("Mark"); mark.setTitle("internal sales"); mark.setSex('M'); mark.setAddress("buckhead"); mark.setZip("30305"); mark.setCountry("USA"); Customer joe = new Customer(); joe.setName("Joe"); joe.setAddress("San Francisco"); joe.setZip("XXXXX"); joe.setCountry("USA"); joe.setComments("Very demanding"); joe.setSex('M'); joe.setSalesperson(mark); Person yomomma = new Person(); yomomma.setName("mum"); yomomma.setSex('F'); s.save(yomomma); s.save(mark); s.save(joe); assertEquals( s.createQuery("from java.io.Serializable").list().size(), 0 ); assertEquals( s.createQuery("from Person").list().size(), 3 ); assertEquals( s.createQuery("from Person p where p.class = Person").list().size(), 1 ); assertEquals( s.createQuery("from Person p where p.class = Customer").list().size(), 1 ); s.clear(); List customers = s.createQuery("from Customer c left join fetch c.salesperson").list(); for ( Iterator iter = customers.iterator(); iter.hasNext(); ) { Customer c = (Customer) iter.next(); assertTrue( Hibernate.isInitialized( c.getSalesperson() ) ); assertEquals( c.getSalesperson().getName(), "Mark" ); } assertEquals( customers.size(), 1 ); s.clear(); customers = s.createQuery("from Customer").list(); for ( Iterator iter = customers.iterator(); iter.hasNext(); ) { Customer c = (Customer) iter.next(); assertFalse( Hibernate.isInitialized( c.getSalesperson() ) ); assertEquals( c.getSalesperson().getName(), "Mark" ); } assertEquals( customers.size(), 1 ); s.clear(); mark = (Employee) s.get( Employee.class, new Long( mark.getId() ) ); joe = (Customer) s.get( Customer.class, new Long( joe.getId() ) ); mark.setZip("30306"); assertEquals( s.createQuery("from Person p where p.address.zip = '30306'").list().size(), 1 ); s.delete(mark); s.delete(joe); s.delete(yomomma); assertTrue( s.createQuery("from Person").list().isEmpty() ); t.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/joinedsubclass/JoinedSubclassTest.java File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/discriminator/DiscriminatorTest.java
Method name: void testJoinedSubclass() Method name: void testDiscriminatorSubclass()
Number of AST nodes: 54 Number of AST nodes: 52
1
Session s = openSession();
1
Session s = openSession();
2
		Transaction t = s.beginTransaction();
2
		Transaction t = s.beginTransaction();
3
		Employee mark = new Employee();
3
		Employee mark = new Employee();
4
		mark.setName("Mark");
4
		mark.setName("Mark");
5
		mark.setTitle("internal sales");
5
		mark.setTitle("internal sales");
6
		mark.setSex('M');
6
		mark.setSex('M');
7
		mark.setAddress("buckhead");
7
		mark.setAddress("buckhead");
8
		mark.setZip("30305");
8
		mark.setZip("30305");
9
		mark.setCountry("USA");
9
		mark.setCountry("USA");
10
		Customer joe = new Customer();
10
		Customer joe = new Customer();
11
		joe.setName("Joe");
11
		joe.setName("Joe");
12
		joe.setAddress("San Francisco");
12
		joe.setAddress("San Francisco");
13
		joe.setZip("XXXXX");
13
		joe.setZip("XXXXX");
14
		joe.setCountry("USA");
14
		joe.setCountry("USA");
15
		joe.setComments("Very demanding");
15
		joe.setComments("Very demanding");
16
		joe.setSex('M');
16
		joe.setSex('M');
17
		joe.setSalesperson(mark);
17
		joe.setSalesperson(mark);
18
		Person yomomma = new Person();
18
		Person yomomma = new Person();
19
		yomomma.setName("mum");
19
		yomomma.setName("mum");
20
		yomomma.setSex('F');
20
		yomomma.setSex('F');
21
		s.save(yomomma);
21
		s.save(yomomma);
22
		s.save(mark);
22
		s.save(mark);
23
		s.save(joe);
23
		s.save(joe);
24
		assertEquals( s.createQuery("from java.io.Serializable").list().size(), 0 );
24
		assertEquals( s.createQuery("from java.io.Serializable").list().size(), 0 );
25
		assertEquals( s.createQuery("from Person").list().size(), 3 );
25
		assertEquals( s.createQuery("from Person").list().size(), 3 );
26
		assertEquals( s.createQuery("from Person p where p.class = Customer").list().size(), 1 );
26
		assertEquals( s.createQuery("from Person p where p.class = Person").list().size(), 1 );
27
		assertEquals( s.createQuery("from Person p where p.class = Person").list().size(), 1 );
27
		assertEquals( s.createQuery("from Person p where p.class = Customer").list().size(), 1 );
28
		s.clear();
28
		s.clear();
29
		List customers = s.createQuery("from Customer c left join fetch c.salesperson").list();
29
		List customers = s.createQuery("from Customer c left join fetch c.salesperson").list();
30
		for ( Iterator iter = customers.iterator(); iter.hasNext(); ) {
30
		for ( Iterator iter = customers.iterator(); iter.hasNext(); ) {
31
			Customer c = (Customer) iter.next();
31
			Customer c = (Customer) iter.next();
32
			assertTrue( Hibernate.isInitialized( c.getSalesperson() ) );
32
			assertTrue( Hibernate.isInitialized( c.getSalesperson() ) );
33
			assertEquals( c.getSalesperson().getName(), "Mark" );
33
			assertEquals( c.getSalesperson().getName(), "Mark" );
34
		}
34
		}
35
		assertEquals( customers.size(), 1 );
35
		assertEquals( customers.size(), 1 );
36
		s.clear();
36
		s.clear();
37
		customers = s.createQuery("from Customer").list();
37
		customers = s.createQuery("from Customer").list();
38
		for ( Iterator iter = customers.iterator(); iter.hasNext(); ) {
38
		for ( Iterator iter = customers.iterator(); iter.hasNext(); ) {
39
			Customer c = (Customer) iter.next();
39
			Customer c = (Customer) iter.next();
40
			assertFalse( Hibernate.isInitialized( c.getSalesperson() ) );
40
			assertFalse( Hibernate.isInitialized( c.getSalesperson() ) );
41
			assertEquals( c.getSalesperson().getName(), "Mark" );
41
			assertEquals( c.getSalesperson().getName(), "Mark" );
42
		}
42
		}
43
		assertEquals( customers.size(), 1 );
43
		assertEquals( customers.size(), 1 );
44
		s.clear();
44
		s.clear();
45
		mark = (Employee) s.get( Employee.class, new Long( mark.getId() ) );
45
		mark = (Employee) s.get( Employee.class, new Long( mark.getId() ) );
46
		joe = (Customer) s.get( Customer.class, new Long( joe.getId() ) );
46
		joe = (Customer) s.get( Customer.class, new Long( joe.getId() ) );
47
 		mark.setZip("30306");
47
 		mark.setZip("30306");
48
		assertEquals( s.createQuery("from Person p where p.address.zip = '30306'").list().size(), 1 );
48
		assertEquals( s.createQuery("from Person p where p.address.zip = '30306'").list().size(), 1 );
49
		if ( supportsRowValueConstructorSyntaxInInList() ) {
50
			s.createCriteria(Person.class).add(
51
					Restrictions.in("address", new Address[] { mark.getAddress(), joe.getAddress() } )
52
			).list();
53
		}
54
		s.delete(mark);
49
		s.delete(mark);
55
		s.delete(joe);
50
		s.delete(joe);
56
		s.delete(yomomma);
51
		s.delete(yomomma);
57
		assertTrue( s.createQuery("from Person").list().isEmpty() );
52
		assertTrue( s.createQuery("from Person").list().isEmpty() );
58
		t.commit();
53
		t.commit();
59
		s.close();
54
		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.7
Clones locationClones are in different classes having the same super class
Number of node comparisons864
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements51
    Number of unmapped statements in the first code fragment3
    Number of unmapped statements in the second code fragment1
    Time elapsed for statement mapping (ms)71.3
    Clone typeType 3
    Mapped Statements
    ID Statement ID Statement
    1
    Session s = openSession();
    1
    Session s = openSession();
    2
    Transaction t = s.beginTransaction();
    2
    Transaction t = s.beginTransaction();
    3
    Employee mark = new Employee();
    3
    Employee mark = new Employee();
    4
    mark.setName("Mark");
    4
    mark.setName("Mark");
    5
    mark.setTitle("internal sales");
    5
    mark.setTitle("internal sales");
    6
    mark.setSex('M');
    6
    mark.setSex('M');
    7
    mark.setAddress("buckhead");
    7
    mark.setAddress("buckhead");
    8
    mark.setZip("30305");
    8
    mark.setZip("30305");
    9
    mark.setCountry("USA");
    9
    mark.setCountry("USA");
    10
    Customer joe = new Customer();
    10
    Customer joe = new Customer();
    11
    joe.setName("Joe");
    11
    joe.setName("Joe");
    12
    joe.setAddress("San Francisco");
    12
    joe.setAddress("San Francisco");
    13
    joe.setZip("XXXXX");
    13
    joe.setZip("XXXXX");
    14
    joe.setCountry("USA");
    14
    joe.setCountry("USA");
    15
    joe.setComments("Very demanding");
    15
    joe.setComments("Very demanding");
    16
    joe.setSex('M');
    16
    joe.setSex('M');
    17
    joe.setSalesperson(mark);
    17
    joe.setSalesperson(mark);
                                                                    
    18
    Person yomomma = new Person();
    18
    Person yomomma = new Person();
                                                                    
    19
    yomomma.setName("mum");
    19
    yomomma.setName("mum");
    19
    yomomma.setName("mum");
    Differences
    Expression1Expression2Difference
    org.hibernate.test.joinedsubclass.Personorg.hibernate.test.discriminator.PersonVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    • Make classes org.hibernate.test.joinedsubclass.Person and org.hibernate.test.discriminator.Person extend a common superclass
    19
    yomomma.setName("mum");
    20
    yomomma.setSex('F');
    20
    yomomma.setSex('F');
    20
    yomomma.setSex('F');
    Differences
    Expression1Expression2Difference
    org.hibernate.test.joinedsubclass.Personorg.hibernate.test.discriminator.PersonVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    • Make classes org.hibernate.test.joinedsubclass.Person and org.hibernate.test.discriminator.Person extend a common superclass
    20
    yomomma.setSex('F');
    21
    s.save(yomomma);
    21
    s.save(yomomma);
    21
    s.save(yomomma);
    Differences
    Expression1Expression2Difference
    org.hibernate.test.joinedsubclass.Personorg.hibernate.test.discriminator.PersonVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    • Make classes org.hibernate.test.joinedsubclass.Person and org.hibernate.test.discriminator.Person extend a common superclass
    21
    s.save(yomomma);
    22
    s.save(mark);
    22
    s.save(mark);
    23
    s.save(joe);
    23
    s.save(joe);
    24
    assertEquals(s.createQuery("from java.io.Serializable").list().size(), 0);
    24
    assertEquals(s.createQuery("from java.io.Serializable").list().size(), 0);
    25
    assertEquals(s.createQuery("from Person").list().size(), 3);
    25
    assertEquals(s.createQuery("from Person").list().size(), 3);
    26
    assertEquals(s.createQuery("from Person p where p.class = Customer").list().size(), 1);
    27
    assertEquals(s.createQuery("from Person p where p.class = Customer").list().size(), 1);
    27
    assertEquals(s.createQuery("from Person p where p.class = Person").list().size(), 1);
    26
    assertEquals(s.createQuery("from Person p where p.class = Person").list().size(), 1);
    28
    s.clear();
    28
    s.clear();
    29
    List customers = s.createQuery("from Customer c left join fetch c.salesperson").list();
    29
    List customers = s.createQuery("from Customer c left join fetch c.salesperson").list();
    30
    for (Iterator iter = customers.iterator(); iter.hasNext(); )
    30
    for (Iterator iter = customers.iterator(); iter.hasNext(); )
    31
    Customer c = (Customer)iter.next();
    31
    Customer c = (Customer)iter.next();
    32
    assertTrue(Hibernate.isInitialized(c.getSalesperson()));
    32
    assertTrue(Hibernate.isInitialized(c.getSalesperson()));
    33
    assertEquals(c.getSalesperson().getName(), "Mark");
    33
    assertEquals(c.getSalesperson().getName(), "Mark");
    34
    assertEquals(customers.size(), 1);
    34
    assertEquals(customers.size(), 1);
    35
    s.clear();
    35
    s.clear();
    36
    customers = s.createQuery("from Customer").list();
    36
    customers = s.createQuery("from Customer").list();
    37
    for (Iterator iter = customers.iterator(); iter.hasNext(); )
    37
    for (Iterator iter = customers.iterator(); iter.hasNext(); )
    38
    Customer c = (Customer)iter.next();
    38
    Customer c = (Customer)iter.next();
    39
    assertFalse(Hibernate.isInitialized(c.getSalesperson()));
    39
    assertFalse(Hibernate.isInitialized(c.getSalesperson()));
    40
    assertEquals(c.getSalesperson().getName(), "Mark");
    40
    assertEquals(c.getSalesperson().getName(), "Mark");
    41
    assertEquals(customers.size(), 1);
    41
    assertEquals(customers.size(), 1);
    42
    s.clear();
    42
    s.clear();
    43
    mark = (Employee)s.get(Employee.class, new Long(mark.getId()));
    43
    mark = (Employee)s.get(Employee.class, new Long(mark.getId()));
    44
    joe = (Customer)s.get(Customer.class, new Long(joe.getId()));
    44
    joe = (Customer)s.get(Customer.class, new Long(joe.getId()));
    45
    mark.setZip("30306");
    45
    mark.setZip("30306");
    46
    assertEquals(s.createQuery("from Person p where p.address.zip = '30306'").list().size(), 1);
    46
    assertEquals(s.createQuery("from Person p where p.address.zip = '30306'").list().size(), 1);
    47
    if (supportsRowValueConstructorSyntaxInInList())
                                                                                                          
    48
    s.createCriteria(Person.class).add(Restrictions.in("address", new Address[] {mark.getAddress(), joe.getAddress()})).list();
                                                                                                                                                                                                                                                            
    49
    s.delete(mark);
    47
    s.delete(mark);
    50
    s.delete(joe);
    48
    s.delete(joe);
    51
    s.delete(yomomma);
    51
    s.delete(yomomma);
    49
    s.delete(yomomma);
    Differences
    Expression1Expression2Difference
    org.hibernate.test.joinedsubclass.Personorg.hibernate.test.discriminator.PersonVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    • Make classes org.hibernate.test.joinedsubclass.Person and org.hibernate.test.discriminator.Person extend a common superclass
    49
    s.delete(yomomma);
    52
    assertTrue(s.createQuery("from Person").list().isEmpty());
    50
    assertTrue(s.createQuery("from Person").list().isEmpty());
    53
    t.commit();
    51
    t.commit();
    54
    s.close();
    52
    s.close();
    Precondition Violations (5)
    Row Violation
    1Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    2Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    3Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    4Type org.hibernate.test.joinedsubclass.Person of variable yomomma does not match with type org.hibernate.test.discriminator.Person of variable yomomma
    5Clone fragment #1 returns variables s, mark, joe , while Clone fragment #2 returns variables