<hibernate-mapping>
    <class name="test.Hibernate" table="HIBERNATE" schema="SYSTEM">
        <composite-id name="id" class="test.HibernateId">
            <key-property name="hid" type="java.lang.Long">
                <column name="HID" precision="22" scale="0" />
            </key-property>
            <key-property name="name" type="java.lang.String">
                <column name="NAME" length="50" />
            </key-property>
        </composite-id>
    </class>
<sql-query name="testquery">
<return alias="hibernate" class="test.Hibernate">
</return>
select name from Hibernate
</sql-query>
</hibernate-mapping>数据库中表名为Hibernate,用select * from Hibernate则没事,可以读出Hibernate对象的List.
用 select hid,name from Hibernate也没事,也是读出对象的List
但是我想只读其中一列,就有问题了.求救怎么用命名查询方式只读一个字段?

解决方案 »

  1.   

    用   select   hid,name   from   Hibernate也没事,也是读出对象的List?
    这句话是什么意思啊?
    我记得这样读出的是Object【】的List啊,
    select name from Hibernate
    读出的也应该是一个Object【】 的List,不过Object只有一个元素吧。
    你要不然把你的代码贴出来看看。
      

  2.   

    Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:2148)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
    at org.hibernate.loader.Loader.list(Loader.java:2024)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:111)
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1655)
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:164)
    at test.JPTEST.main(JPTEST.java:47)
    Caused by: java.sql.SQLException: 列名无效
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
    at oracle.jdbc.driver.OracleStatement.get_column_index(OracleStatement.java:6218)
    at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:1557)
    at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:1601)
    at org.hibernate.type.LongType.get(LongType.java:28)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:113)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:102)
    at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1088)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:554)
    at org.hibernate.loader.Loader.doQuery(Loader.java:689)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    at org.hibernate.loader.Loader.doList(Loader.java:2145)
    ... 7 more
      

  3.   

    HibernateDAO hdao = new HibernateDAO();
    List xxx= hdao.getSession().getNamedQuery("testquery").list();
    Hibernate bb=(Hibernate)xxx.get(0);

    System.out.println(bb.getId().getName());
    System.out.println(xxx.get(0));
      

  4.   

    HibernateDAO hdao = new HibernateDAO();
    List xxx= hdao.getSession().getNamedQuery("testquery").list();
    Hibernate bb=(Hibernate)xxx.get(0);

    System.out.println(bb.getId().getName());
    System.out.println(xxx.get(0));
      

  5.   

    是不是<return   alias="hibernate"   class="test.Hibernate"> 
    </return> 
    里要加什么return property这样的东西?求救啊...
      

  6.   

    bean的属性和数据库字段确信没写错?
      

  7.   

    谁能给个例子证明可以用命名查询的办法只取一部分字段?我新建了一个表,主键ID,和一个字段name
    <hibernate-mapping>
        <class name="test.Hi" table="HI" schema="SYSTEM">
            <id name="id" type="java.lang.Long">
                <column name="ID" precision="22" scale="0" />
                <generator class="assigned" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="NAME" length="50" />
            </property>
        </class>
        <sql-query name="sbquery">
    <return alias="hie" class="test.Hi">
    </return>
    select id as {hie.id},name as {hie.name} from Hi where 1=1
    </sql-query>

    </hibernate-mapping>如上可用.
    但是我一旦改成select id as {hie.id} from Hi where 1=1,只读主键的话,立刻出现列名无效的错误这是调用代码,求救如果在命名查询中取得一个字段?