Я использую Hibernate для извлечения некоторых данных из базы данных. Набор результатов, возвращаемый SQL-запросом, который я использую, выглядит примерно так:
SourceId | TargetId
1 | 10
1 | 11
1 | 12
2 | 13
2 | 14
Сейчас у меня что-то вроде следующего класса:
@NamedNativeQuery(name = "myQuery", resultSetMapping = "myMapping",
query = "select source.id id1, target.id id2
+ "from someTable source "
+ "left join associationTable association on source.id=association.sourceId "
+ "left join someTable target on association.targetId=target.id "
+ "where source.id in(?1)")
@SqlResultSetMapping(name = "myMapping",
entities = @EntityResult(entityClass = DBCalculationElement.class, fields = {
@FieldResult(name = "targetId", column = "targetId"),
@FieldResult(name = "sourceId", column = "sourceId") }))
public class MyClass {
private String sourceId;
private String targetId;
public String getSourceId() {
return sourceId;
}
public String getTargetId() {
return targetId;
}
}
Несмотря на то, что все работает нормально, и я получаю необходимые результаты, в некоторых случаях набор результатов действительно огромен (тысячи строк), поэтому на получение данных уходит несколько минут. Я знаю, что Hibernate не является лучшим решением с точки зрения производительности, когда дело касается действительно больших наборов результатов, но я стараюсь избегать использования сырого JDBC.
Одним из обходных путей может быть список строк в качестве targetId. Таким образом, используя приведенный выше resultSet в качестве примера, я получу 2 объекта, один с
sourceId = "1"
, который также имеет список идентификаторов targetIds, содержащий следующее:
targetId = <"10", "11", "12">
и нечто подобное для второго объекта с sourceId = "2".
Кто-нибудь знает, как я могу сделать это с помощью Hibernate? Как я могу отобразить несколько строк в список в Java?