Java NamedQuery选择返回列表<;对象>;。如何从对象中获取价值

Java NamedQuery选择返回列表<;对象>;。如何从对象中获取价值,java,hibernate,Java,Hibernate,我有一个select语句,它进入两个表并从每个表中获取ID。这是我的伪代码: 表1(研究)包含研究id 表2(图像)具有图像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") 在我的代码中,

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

表1(研究)包含研究id

表2(图像)具有图像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>
Query Query=getSession().GetNamedNaviRequesty(“测试”);
setParameter(研究ID、研究ID);
query.setParameter(IMAGE\u ID,imageId);
List result=query.getResultList()//结果是列表
结果是对象列表,其中每个对象有两个值,一个研究id和一个图像id


如何从对象中提取这些信息?执行此操作的最佳方法是什么?

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

公共类studyImageId{
私人期末长期学习;
私有最终长imageId;
公共研究图像ID(长研究ID、长图像ID){
this.studyId=studyId;
this.imageId=imageId;
}
公共长getStudyId(){
返回研究ID;
}
公共长getImageId(){
返回imageId;
}
}
// ...
@命名设备(
name=“test”,
query=“选择”
+“study.study\u id作为std\u id,image.image\u id作为img\u id”
+“来自学习,学习,图像”
+“其中image\u id=:imageId和study\u id=:studyId”,
结果映射=“研究\u图像\u ID\u dto”
)
@SqlResultsMapping(
name=“学习\u图像\u标识\u dto”,
classes=@ConstructorResult(
targetClass=studyImageId.class,
列={
@ColumnResult(name=“std_id”),
@ColumnResult(name=“img\u id”)
}
)
)
然后使用它:

List studyImageIds=session.getNamedQuery(“测试”)
.setParameter(研究ID,研究ID)
.setParameter(图像标识,图像标识)
.list();

依我看,这比类型铸造更安全、更优雅。请参阅。

转换为
对象[]
中的进一步详细信息,并将数组中的每个元素转换为其正确的类型(
Long
或其他类型)?将列表中的对象转换为对象[]?即更正撤消。然后,至少如果你得到一个
ClassCastException
,它会告诉你真正的类是什么,这样你就知道将它们转换成什么了。正如你所知道的,你也可以使用HQL来实现这个目的。HQL支持交叉连接和实体之间的连接。