Session s = openSession(); s.beginTransaction(); Person me = new Person(); me.name = "Steve"; s.save( me ); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); me = ( Person ) s.load( Person.class, me.name ); assertNull( me.address ); s.delete( me ); s.getTransaction().commit(); s.close();
clearCounts(); Session s = openSession(); s.beginTransaction(); Employer emp = new Employer(); s.persist( emp ); s.getTransaction().commit(); s.close(); s = openSession(); s.beginTransaction(); s.delete( emp ); emp = ( Employer ) s.get( Employee.class, emp.getId() ); s.getTransaction().commit(); s.close(); assertNull( "get did not return null after delete", emp );
Clone fragments detected by clone detection tool
File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/onetoone/optional/OptionalOneToOneTest.java File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/ops/GetLoadTest.java
Method name: void testOptionalOneToOneRetrieval() Method name: void testGetAfterDelete()
Number of AST nodes: 14 Number of AST nodes: 14
1
clearCounts();
1
Session s = openSession();
2
		Session s = openSession();
2
		s.beginTransaction();
3
		s.beginTransaction();
3
		Person me = new Person();
4
		Employer emp = new Employer();
4
		me.name = "Steve";
5
		
5
		s.save( me );
6
s.persist( emp );
6
		s.getTransaction().commit();
7
		s.getTransaction().commit();
7
		s.close();
8
		s.close();
8

9
		s = openSession();
9
		s = openSession();
10
		s.beginTransaction();
10
		s.beginTransaction();
11
		me = ( Person ) s.load( Person.class, me.name );
11
		
12
		assertNull( me.address );
13
		s.delete( me
12
s.delete( emp );
14
 );
13
		emp = ( Employer ) s.get( Employee.class, emp.getId() );
15
		s.getTransaction().commit();
14
		s.getTransaction().commit();
16
		s.close();
15
		s.close();
16
		assertNull( "get did not return null after delete", emp );
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.0
Clones locationClones are in different classes having the same super class
Number of node comparisons76
  1. {Non-refactorable}
    Mapping Summary
    Number of mapped statements10
    Number of unmapped statements in the first code fragment4
    Number of unmapped statements in the second code fragment4
    Time elapsed for statement mapping (ms)0.0
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
                                      
    1
    clearCounts();
    1
    Session s = openSession();
    2
    Session s = openSession();
    2
    s.beginTransaction();
    3
    s.beginTransaction();
    3
    Person me = new Person();
                                                        
                                                                  
    4
    Employer emp = new Employer();
    4
    me.name = "Steve";
    4
    me.name = "Steve";
    Preondition Violations
    Unmatched statement me.name="Steve"; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
                                          
                                        
    5
    s.persist(emp);
    Preondition Violations
    Unmatched statement s.persist(emp); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    5
    s.persist(emp);
    5
    s.save(me);
    5
    s.save(me);
    Preondition Violations
    Unmatched statement s.save(me); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                
    6
    s.getTransaction().commit();
    6
    s.getTransaction().commit();
    7
    s.close();
    7
    s.close();
    8
    s = openSession();
    8
    s = openSession();
    9
    s.beginTransaction();
    9
    s.beginTransaction();
    10
    me = (Person)s.load(Person.class, me.name);
    10
    me = (Person)s.load(Person.class, me.name);
    Preondition Violations
    Unmatched statement me=(Person)s.load(Person.class,me.name); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
                                                                                            
                                                                                                            
    11
    emp = (Employer)s.get(Employee.class, emp.getId());
    Preondition Violations
    Unmatched statement emp=(Employer)s.get(Employee.class,emp.getId()); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    11
    emp = (Employer)s.get(Employee.class, emp.getId());
    11
    assertNull(me.address);
    11
    assertNull(me.address);
    14
    assertNull("get did not return null after delete", emp);
    Differences
    Expression1Expression2Difference
    assertNull(me.address)assertNull("get did not return null after delete",emp)ARGUMENT_NUMBER_MISMATCH
    Preondition Violations
    Expression assertNull(me.address) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression assertNull("get did not return null after delete",emp) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression assertNull(me.address) is a void method call, and thus it cannot be parameterized
    Expression assertNull("get did not return null after delete",emp) is a void method call, and thus it cannot be parameterized
    14
    assertNull("get did not return null after delete", emp);
    12
    s.delete(me);
    12
    s.delete(me);
    10
    s.delete(emp);
    Differences
    Expression1Expression2Difference
    meempVARIABLE_NAME_MISMATCH
    org.hibernate.test.onetoone.optional.Personorg.hibernate.test.ops.EmployerVARIABLE_TYPE_MISMATCH
    Preondition Violations
    Type org.hibernate.test.onetoone.optional.Person of variable me does not match with type org.hibernate.test.ops.Employer of variable emp
    • Make classes org.hibernate.test.onetoone.optional.Person and org.hibernate.test.ops.Employer extend a common superclass
    10
    s.delete(emp);
    13
    s.getTransaction().commit();
    12
    s.getTransaction().commit();
    14
    s.close();
    13
    s.close();
    Precondition Violations (10)
    Row Violation
    1Unmatched statement me.name="Steve"; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted
    2Unmatched statement s.persist(emp); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    3Unmatched statement s.save(me); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    4Unmatched statement me=(Person)s.load(Person.class,me.name); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    5Unmatched statement emp=(Employer)s.get(Employee.class,emp.getId()); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted
    6Expression assertNull(me.address) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    7Expression assertNull("get did not return null after delete",emp) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    8Expression assertNull(me.address) is a void method call, and thus it cannot be parameterized
    9Expression assertNull("get did not return null after delete",emp) is a void method call, and thus it cannot be parameterized
    10Type org.hibernate.test.onetoone.optional.Person of variable me does not match with type org.hibernate.test.ops.Employer of variable emp