我正在使用以下代码来使用hibernate执行本机SQL查询:
Query zonesQuery = session.createNativeQuery(
"Select * \n" +
"FROM dbo.Structure AS S\n" +
"JOIN dbo.StructureLocationType AS SLT ON SLT.StructureId = S.Id\n" +
"WHERE SLT.LocationTypeId = :lc").addEntity(StructureEntity.class);
zonesQuery.setParameter("lc", locationTypeID);
List<StructureEntity> zones = zonesQuery.list();
这样就可以了,它让我得到了StructureEntity的列表
现在,因为我的SQL查询是从StructureLocationType表中“联接”的,所以仍然可以使用单个查询来获得整个StructureLocationType行?
谢谢。
最佳答案
您不能从一个查询中获取多个对象。
但是您可以选择所需的列,然后迭代返回的Object数组:
查询:
SELECT s.id, s.someColumn, slt.id, slt.structureId
FROM dbo.Structure AS s
JOIN dbo.StructureLocationType AS slt on slt.structureId = s.id
WHERE slt.locationTypeId = :lc
然后遍历Object数组:
List<Object[]> result = query.getResultList();
或者,您可以在数据库上创建视图,并使用Table注释将其映射到Java实体,就像它是普通表一样:
@Entity
@Table(name = "STRUCTURE_LOCATION_TYPE_VIEW")
public class StructureAndLocationType {
// ...
}
我认为有一种方法可以从查询映射到对象,而无需创建数据库视图,但是现在无法找到它。