Session session = openSession(); session.beginTransaction(); Definition definition = new Definition(); Value value1 = new Value( definition ); value1.getLocalizedStrings().addString( new Locale( "en_US" ), "hello" ); session.persist( definition ); session.getTransaction().commit(); session.close(); // step2, we verify that the definition has one value; then we detach it session = openSession(); session.beginTransaction(); definition = ( Definition ) session.get( Definition.class, definition.getId() ); assertEquals( 1, definition.getValues().size() ); session.getTransaction().commit(); session.close(); // step3, we add a new value during detachment Value value2 = new Value( definition ); value2.getLocalizedStrings().addString( new Locale( "es" ), "hola" ); // step4 we merge the definition session = openSession(); session.beginTransaction(); session.merge( definition ); session.getTransaction().commit(); session.close(); // step5, final test session = openSession(); session.beginTransaction(); definition = ( Definition ) session.get( Definition.class, definition.getId() ); assertEquals( 2, definition.getValues().size() ); Iterator values = definition.getValues().iterator(); while ( values.hasNext() ) { assertEquals( 1, ( ( Value ) values.next() ).getLocalizedStrings().getStringsCopy().size() ); } session.getTransaction().commit(); session.close();
Session session = openSession(); session.beginTransaction(); Definition definition = new Definition(); Value value1 = new Value( definition ); session.persist( definition ); session.getTransaction().commit(); session.close(); // step2, we verify that the definition has one value; then we detach it session = openSession(); session.beginTransaction(); definition = ( Definition ) session.get( Definition.class, definition.getId() ); assertEquals( 1, definition.getValues().size() ); session.getTransaction().commit(); session.close(); // step3, we add a new value during detachment ( ( Value ) definition.getValues().iterator().next() ).getLocalizedStrings().addString( new Locale( "en_US" ), "hello" ); Value value2 = new Value( definition ); value2.getLocalizedStrings().addString( new Locale( "es" ), "hola" ); // step4 we merge the definition session = openSession(); session.beginTransaction(); session.merge( definition ); session.getTransaction().commit(); session.close(); // step5, final test session = openSession(); session.beginTransaction(); definition = ( Definition ) session.get( Definition.class, definition.getId() ); assertEquals( 2, definition.getValues().size() ); Iterator values = definition.getValues().iterator(); while ( values.hasNext() ) { assertEquals( 1, ( ( Value ) values.next() ).getLocalizedStrings().getStringsCopy().size() ); } session.getTransaction().commit(); session.close();
Clone fragments detected by clone detection tool
File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/component/cascading/collection/CascadeToComponentCollectionTest.java File path: /hibernate-distribution-3.3.2.GA/project/testsuite/src/test/java/org/hibernate/test/component/cascading/collection/CascadeToComponentCollectionTest.java
Method name: void testMerging() Method name: void testMergingOriginallyNullComponent()
Number of AST nodes: 30 Number of AST nodes: 30
1
Session session = openSession();
1
Session session = openSession();
2
		session.beginTransaction();
2
		session.beginTransaction();
3
		Definition definition = new Definition();
3
		Definition definition = new Definition();
4
		Value value1 = new Value( definition );
4
		Value value1 = new Value( definition );
5
		value1.getLocalizedStrings().addString( new Locale( "en_US" ), "hello" );
5
		
6
		session.persist( definition );
6
session.persist( definition );
7
		session.getTransaction().commit();
7
		session.getTransaction().commit();
8
		session.close();
8
		session.close();
9
		// step2, we verify that the definition has one value; then we detach it
9
		// step2, we verify that the definition has one value; then we detach it
10
		session = openSession();
10
		session = openSession();
11
		session.beginTransaction();
11
		session.beginTransaction();
12
		definition = ( Definition ) session.get( Definition.class, definition.getId() );
12
		definition = ( Definition ) session.get( Definition.class, definition.getId() );
13
		assertEquals( 1, definition.getValues().size() );
13
		assertEquals( 1, definition.getValues().size() );
14
		session.getTransaction().commit();
14
		session.getTransaction().commit();
15
		session.close();
15
		session.close();
16
		// step3, we add a new value during detachment
16
		// step3, we add a new value during detachment
17
		
17
		( ( Value ) definition.getValues().iterator().next() ).getLocalizedStrings().addString( new Locale( "en_US" ), "hello" );
18
Value value2 = new Value( definition );
18
		Value value2 = new Value( definition );
19
		value2.getLocalizedStrings().addString( new Locale( "es" ), "hola" );
19
		value2.getLocalizedStrings().addString( new Locale( "es" ), "hola" );
20
		// step4 we merge the definition
20
		// step4 we merge the definition
21
		session = openSession();
21
		session = openSession();
22
		session.beginTransaction();
22
		session.beginTransaction();
23
		session.merge( definition );
23
		session.merge( definition );
24
		session.getTransaction().commit();
24
		session.getTransaction().commit();
25
		session.close();
25
		session.close();
26
		// step5, final test
26
		// step5, final test
27
		session = openSession();
27
		session = openSession();
28
		session.beginTransaction();
28
		session.beginTransaction();
29
		definition = ( Definition ) session.get( Definition.class, definition.getId() );
29
		definition = ( Definition ) session.get( Definition.class, definition.getId() );
30
		assertEquals( 2, definition.getValues().size() );
30
		assertEquals( 2, definition.getValues().size() );
31
		Iterator values = definition.getValues().iterator();
31
		Iterator values = definition.getValues().iterator();
32
		while ( values.hasNext() ) {
32
		while ( values.hasNext() ) {
33
			assertEquals( 1, ( ( Value ) values.next() ).getLocalizedStrings().getStringsCopy().size() );
33
			assertEquals( 1, ( ( Value ) values.next() ).getLocalizedStrings().getStringsCopy().size() );
34
		}
34
		}
35
		session.getTransaction().commit();
35
		session.getTransaction().commit();
36
		session.close();
36
		session.close();
Summary
Number of common nesting structure subtrees1
Number of refactorable cases1
Number of non-refactorable cases0
Time elapsed for finding largest common nesting structure subtrees (ms)0.1
Clones locationClones are declared in the same class
Number of node comparisons133
  1. {Refactorable}
    Mapping Summary
    Number of mapped statements30
    Number of unmapped statements in the first code fragment0
    Number of unmapped statements in the second code fragment0
    Time elapsed for statement mapping (ms)29.3
    Clone typeType 2
    Mapped Statements
    ID Statement ID Statement
    1
    Session session = openSession();
    1
    Session session = openSession();
    2
    session.beginTransaction();
    2
    session.beginTransaction();
    3
    Definition definition = new Definition();
    3
    Definition definition = new Definition();
    4
    Value value1 = new Value(definition);
    4
    Value value1 = new Value(definition);
    5
    value1.getLocalizedStrings().addString(new Locale("en_US"), "hello");
    5
    value1.getLocalizedStrings().addString(new Locale("en_US"), "hello");
    14
    ((Value)definition.getValues().iterator().next()).getLocalizedStrings().addString(new Locale("en_US"), "hello");
    Differences
    Expression1Expression2Difference
    value1((Value)definition.getValues().iterator().next())TYPE_COMPATIBLE_REPLACEMENT
    Preondition Violations
    Expression value1 cannot be parameterized, because it has dependencies to/from statements that will be extracted
    Expression ((Value)definition.getValues().iterator().next()) cannot be parameterized, because it has dependencies to/from statements that will be extracted
    14
    ((Value)definition.getValues().iterator().next()).getLocalizedStrings().addString(new Locale("en_US"), "hello");
    6
    session.persist(definition);
    5
    session.persist(definition);
    7
    session.getTransaction().commit();
    6
    session.getTransaction().commit();
    8
    session.close();
    7
    session.close();
    9
    session = openSession();
    8
    session = openSession();
    10
    session.beginTransaction();
    9
    session.beginTransaction();
    11
    definition = (Definition)session.get(Definition.class, definition.getId());
    10
    definition = (Definition)session.get(Definition.class, definition.getId());
    12
    assertEquals(1, definition.getValues().size());
    11
    assertEquals(1, definition.getValues().size());
    13
    session.getTransaction().commit();
    12
    session.getTransaction().commit();
    14
    session.close();
    13
    session.close();
    15
    Value value2 = new Value(definition);
    15
    Value value2 = new Value(definition);
    16
    value2.getLocalizedStrings().addString(new Locale("es"), "hola");
    16
    value2.getLocalizedStrings().addString(new Locale("es"), "hola");
    17
    session = openSession();
    17
    session = openSession();
    18
    session.beginTransaction();
    18
    session.beginTransaction();
    19
    session.merge(definition);
    19
    session.merge(definition);
    20
    session.getTransaction().commit();
    20
    session.getTransaction().commit();
    21
    session.close();
    21
    session.close();
    22
    session = openSession();
    22
    session = openSession();
    23
    session.beginTransaction();
    23
    session.beginTransaction();
    24
    definition = (Definition)session.get(Definition.class, definition.getId());
    24
    definition = (Definition)session.get(Definition.class, definition.getId());
    25
    assertEquals(2, definition.getValues().size());
    25
    assertEquals(2, definition.getValues().size());
    26
    Iterator values = definition.getValues().iterator();
    26
    Iterator values = definition.getValues().iterator();
    27
    while (values.hasNext())
    27
    while (values.hasNext())
    28
    assertEquals(1, ((Value)values.next()).getLocalizedStrings().getStringsCopy().size());
    28
    assertEquals(1, ((Value)values.next()).getLocalizedStrings().getStringsCopy().size());
    29
    session.getTransaction().commit();
    29
    session.getTransaction().commit();
    30
    session.close();
    30
    session.close();
    Precondition Violations (2)
    Row Violation
    1Expression value1 cannot be parameterized, because it has dependencies to/from statements that will be extracted
    2Expression ((Value)definition.getValues().iterator().next()) cannot be parameterized, because it has dependencies to/from statements that will be extracted