使用列上的别名查询会出错

时间:2011-08-19 08:11:45

标签: java sql hibernate

当我为列使用别名时,我得到错误。没有别名,每个人都很好。有什么问题?这是一个简单的示例,但需要在实际项目中使用更多别名来将结果包装在某些非实体类中,但由于此错误而无法使用。怎么解决这个问题?

不工作(在id列上使用别名):

public List<Long> findAll(Long ownerId) {
    String sql = "select id as myId  from products where ownerId = "+ownerId;
    SQLQuery query = getSession().createSQLQuery(sql);
    return query.list();
}

错误:

  

WARN [JDBCExceptionReporter:77]:SQL错误:0,SQLState:S0022错误   [JDBCExceptionReporter:78]:找不到列'id'。

工作(不带别名):

public List<Long> findAll(Long ownerId) {
    String sql = "select id from products where ownerId = "+ownerId;
    SQLQuery query = getSession().createSQLQuery(sql);
    return query.list();
}

1 个答案:

答案 0 :(得分:6)

如果您的“产品”已映射,则hibernate可能不知道“myId”,因此无法选择它。 您可以尝试以下方式:

getSession().createSQLQuery(sql).addScalar("myId", Hibernate.LONG)