【发布时间】:2017-06-01 09:59:12
【问题描述】:
我需要应用与此类似的 SQL 查询。
SELECT
id as id,
c03 as c03,
c34 as c34
FROM
(SELECT
id,
c03,
c34
FROM
students
where
c34 in(
?, ?,?,?
)
order by
id desc) o
group by
c34;
还有我的 Java 代码。
private final void retrieveStudents(){
final List result = currentSession()
.createSQLQuery("SELECT id as id,c03 as c03,c34 as c34 FROM (SELECT id,c34,c03 FROM students where c34 in(:filters) order by id desc) o group by c34;")
.setParameterList("filters",Arrays.asList(74,1812))
.list();
result.forEach(this::consumer1);
}
查询没问题。返回一个我可以迭代的对象数组,但我想返回一个学生对象,所以我添加了。
.addEntity(Student.class)
但是会抛出一个错误,上面写着
Column 'ACTIVE' not found.
我也尝试过 .addScalar 但同样的事情发生了。
.addScalar("id",org.hibernate.type.IntegerType.INSTANCE)
.addScalar("c03",org.hibernate.type.DateType.INSTANCE)
这是来自 Student 的列,但不在投影上
我想要的只是一个填充了 id,c03,c34 值的 Student 对象。
我做错了什么有可能吗?
【问题讨论】:
-
答案见下文,但最简单的方法是从学生表中选择所有列(即选择 *)。然后你可以得到你的实体。从性能的角度来看,选择一些额外的列很少有什么大不了的。