Загрузка родительского элемента и его дочерних элементов, но порядок НЕ соответствует базе данных.
Существует родительский класс со списком встраиваемых дочерних элементов, оба аннотированы для JPA.
@Entity
class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ElementCollection
@OrderColumn
private List<Child> children;
}
@Embeddable
class Child {
private String name;
}
Связанные таблицы заполнены набором тестовых данных, как показано ниже. Обратите внимание, что children_order поменялся местами. Также важен порядок строк.
+----+--------+ +----+-----------+----------------+---------+
| id | name | | id | parent_id | children_order | name |
+----+--------+ +----+-----------+----------------+---------+
| 1 | parent | | 1 | 1 | 1 | child 0 |
+----+--------+ +----+-----------+----------------+---------+
| 2 | 1 | 0 | child 1 |
+----+-----------+----------------+---------+
Вот тестовый пример JUnit. Фабрика EntityManagerFactory инициализируется в @BeforeClass, а набор тестовых данных загружается в @ Before.
em = factory.createEntityManager();
String jpql = "select p.children from Parent p where p.id=:id";
List<Child> children = em.createQuery(jpql, Child.class)
.setParameter("id", 1)
.getSingleResult();
em.close();
assertThat(children.get(0).name, equalTo("child 1"));
assertThat(children.get(1).name, equalTo("child 0"));
Тестовый пример не пройден, я понятия не имею, почему. Конечно, я делаю что-то не так, но я не знаю что. Я сделал поиск в Интернете и, конечно, ТАК, но не повезло. Пожалуйста, помогите.