命名查询选择返回列表<Object>。如何从对象中获取值



我有一个select语句,它进入两个表并从每个表中获取id。这是我的伪代码:

表1(研究(具有study_id

表2(图像(具有image_id

NamedNativeQuery(name = "test", query = "select study.study_id, image.image_id from study study, image image where image_id=:imageId and study_id=:studyId")

在我的代码中,我有:

Query query = getSession().getNamedNativeQuery("test");
query.setParameter(STUDY_ID, studyId);
query.setParameter(IMAGE_ID, imageId);
List result = query.getResultList(); //result is List<Object>

结果是Object的列表,其中每个Object有两个值,一个study_id和一个image_id。

如何从Object中提取这些信息?做到这一点的最佳方法是什么?

您可以通过以下方式将@SqlResultSetMapping@ConstructorResult一起使用:

public class StudyImageIds {
private final Long studyId;
private final Long imageId;
public StudyImageIds(Long studyId, Long imageId) {
this.studyId = studyId;
this.imageId = imageId;
}
public Long getStudyId() {
return studyId;
}
public Long getImageId() {
return imageId;
}
}
// ...
@NamedNativeQuery(
name = "test",
query = "select "
+ "  study.study_id as std_id, image.image_id as img_id "
+ "from study study, image image "
+ "where image_id = :imageId and study_id = :studyId",
resultSetMapping = "study_image_ids_dto"
)
@SqlResultSetMapping(
name = "study_image_ids_dto",
classes = @ConstructorResult(
targetClass = StudyImageIds.class,
columns = {
@ColumnResult(name = "std_id"),
@ColumnResult(name = "img_id")
}
)
)

然后使用它:

List<StudyImageIds> studyImageIds = session.getNamedQuery("test")
.setParameter(STUDY_ID, studyId)
.setParameter(IMAGE_ID, imageId)
.list();

IMHO这比类型铸造更安全、更优雅。请参阅文档中的更多详细信息。

最新更新