String sql = "select *  from tableName" ; //ok
String sql = "select ID from tableName" ; //报错..org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not execute query; 
bad SQL grammar [ select ID from   T_TEST  ]; 
nested exception is java.sql.SQLException: 列名无效生成的sql语句却是可以执行.数据库的字段是"ID"因为是用SQLQuery query = session.createSQLQuery(sql);
所以和实体对象没关系吧,再说我也做了映射,用select * 就可以查到全部.为什么select id 就不行呢??

解决方案 »

  1.   

    映射文件 还有bean类 数据库中的字段 这些再检查一下
      

  2.   

    你应该在你的javabean中(tableName)加一个只带id的构造函数。
    public tableName(Long id){
    this.id=id;
    }
      

  3.   

    select t.id from table t给表加个别名
      

  4.   

    如果你要查询表里所有的数据:from table(此表名是你实体类的名称,不是表名称),要看看你的实体类里面有没有这个ID字段
      

  5.   


    @Entity
    @Table(name="T_TEST")
    public class User {
    private String id ;
    private String name ; @Id
    @GenericGenerator(name="idGenerator", strategy="uuid") 
    @GeneratedValue(generator="idGenerator") 
    @Column(name="ID")
    public String getId() {
    return id;
    }

    public void setId(String id) {
    this.id = id;
    }

    @Column(name="NAME")
    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }
    }
    起了别名也不行,如果写成select id,name就可以
      

  6.   

    javabean 写的是id,
    sql = “select id from tabName”
      

  7.   

    String sql = "select ID from tableName" ; //报错..
    lz,id一般是数据库关键字,你可以给表一个别名,再用别名.id 比如:String sql = "select n.id from tableName n" ;
      

  8.   

    hibernate的hql语句查询的表名称,应为系统生成的映射文件的名字,也就是通常的实体类。要查询它的字段的话(属性)比如映射文件为:User.java
    其中包含id,name
    那么查询语句应为 select User.id from User如果只是查询的话,select可以忽略不写。
      

  9.   

    赞同....
    一般都是这么来的, t相当于一个table实例
      

  10.   

    使用Hibernate 怎么不用HQL语言呀 其他地方没有事的话 映射那个地方应该有问题  你好好看看