diff --git a/hibernate-core/src/test/java/org/hibernate/jpa/test/mapping/UnidirectionalOneToManyOrderColumnTest.java b/hibernate-core/src/test/java/org/hibernate/jpa/test/mapping/UnidirectionalOneToManyOrderColumnTest.java index 9588504d06..0a88bb676d 100644 --- a/hibernate-core/src/test/java/org/hibernate/jpa/test/mapping/UnidirectionalOneToManyOrderColumnTest.java +++ b/hibernate-core/src/test/java/org/hibernate/jpa/test/mapping/UnidirectionalOneToManyOrderColumnTest.java @@ -7,32 +7,37 @@ package org.hibernate.jpa.test.mapping; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.stream.Collector; +import java.util.stream.Collectors; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.OrderColumn; +import javax.persistence.Table; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; -import org.hibernate.testing.FailureExpected; +import org.hibernate.testing.TestForIssue; import org.junit.Test; import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; +import static org.junit.Assert.assertEquals; +@TestForIssue(jiraKey = "HHH-11587") public class UnidirectionalOneToManyOrderColumnTest extends BaseEntityManagerFunctionalTestCase { @Test - @FailureExpected( jiraKey = "HHH-11587" ) - public void testQuote() { + public void testRemovingAnElement() { doInJPA( this::entityManagerFactory, entityManager -> { ParentData parent = new ParentData(); entityManager.persist( parent ); - String[] childrenStr = new String[] { "One", "Two", "Three", "Four", "Five" }; + String[] childrenStr = new String[] {"One", "Two", "Three"}; for ( String str : childrenStr ) { ChildData child = new ChildData( str ); entityManager.persist( child ); @@ -46,6 +51,57 @@ public void testQuote() { } ); } + @Test + public void testAddingAnElement() { + doInJPA( this::entityManagerFactory, entityManager -> { + + ParentData parent = new ParentData(); + entityManager.persist( parent ); + + String[] childrenStr = new String[] {"One", "Two", "Three"}; + for ( String str : childrenStr ) { + ChildData child = new ChildData( str ); + entityManager.persist( child ); + parent.getChildren().add( child ); + } + + entityManager.flush(); + + List children = parent.getChildren(); + children.add( 1, new ChildData( "Another" ) ); + } ); + } + + @Test + public void testRemovingAndAddingAnElement() { + doInJPA( this::entityManagerFactory, entityManager -> { + + ParentData parent = new ParentData(); + entityManager.persist( parent ); + + String[] childrenStr = new String[] {"One", "Two", "Three"}; + for ( String str : childrenStr ) { + ChildData child = new ChildData( str ); + entityManager.persist( child ); + parent.getChildren().add( child ); + } + + entityManager.flush(); + + List children = parent.getChildren(); + children.remove( 0 ); + children.add( 1, new ChildData( "Another" ) ); + } ); + doInJPA( this::entityManagerFactory, entityManager -> { + + ParentData parent = entityManager.find( ParentData.class, 1L ); + List childIds = parent.getChildren().stream().map( ChildData::toString ).collect( Collectors.toList() ); + int i = 0; + assertEquals( "Two", childIds.get( i++ )); + assertEquals( "Another", childIds.get( i++ )); + assertEquals( "Three", childIds.get( i++ )); + } ); + } @Override protected Class[] getAnnotatedClasses() { @@ -55,7 +111,8 @@ protected Class[] getAnnotatedClasses() { }; } - @Entity + @Entity(name = "ParentData") + @Table(name = "PARENT") public static class ParentData { @Id @GeneratedValue @@ -70,7 +127,8 @@ public List getChildren() { } } - @Entity + @Entity(name = "ChildData") + @Table(name = "CHILD") public static class ChildData { @Id @GeneratedValue