У меня есть родительская таблица и дочерняя таблица в моей базе данных и имеют одно отображение ToToMany для них в соответствующих классах сущностей. Детский стол имеет внешний ключ parent_id. Я использую JPA 2 с Hibernate и MySQL DB.Исходный результат запроса JPA возвращает повторяющиеся дочерние объекты
Я хочу получить все родительские объекты и их соответствующие дочерние объекты на основе некоторого родительского свойства с помощью SQL Native Query.
Для этого у меня есть SqlResultSetMapping следующим образом:
@SqlResultSetMapping(name="ParentsWithChildren",
entities={ @EntityResult(entityClass = Parent.class),
@EntityResult(entityClass = Child.class)})
Я запрашивая следующим образом:
String queryString = "select p.*, c.* from parent p left join child c on p.id = c.parent_id where p.property = <some_property>";
Query query = entityManager.createNativeQuery(queryString, "ParentsWithChildren");
List<Object[]> resultList = query.getResultList();
На обходе по списку результатов, я считаю дубликат дочерних объектов для различных строк в моем детского стола, как показано на выходе:
for(Object obj[]: resultList){
Parent parent = (Parent) obj[0];
Child child = (Child) obj[1];
System.out.println("Parent: " + parent + ", Child: " + child);
}
Выход:
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Parent: [email protected], Child: [email protected]
Я не понимаю, почему это так. Есть ли способ (сопоставление) для получения всех (разных) дочерних объектов с помощью собственного запроса. Получение данных с именами столбцов может работать и не требует соответствующего сопоставления объектов, но я хочу получить все столбцы дочерней таблицы и, следовательно, предпочтет пользователю c. * В запросе sql.
Вы пытались добавить «отдельный» в ваш запрос на выбор? –