关于hibernate的命名查询问题

jiangpeng84 2008-02-20 04:41:53
<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
但是我想只读其中一列,就有问题了.求救怎么用命名查询方式只读一个字段?
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
航母 2010-11-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jiangpeng84 的回复:]

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


试过了 没用
航母 2010-11-11
  • 打赏
  • 举报
回复
楼主解决了没 我也遇到这个问题了
jiangpeng84 2008-02-20
  • 打赏
  • 举报
回复
谁能给个例子证明可以用命名查询的办法只取一部分字段?

我新建了一个表,主键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,只读主键的话,立刻出现列名无效的错误

这是调用代码,求救如果在命名查询中取得一个字段?
rakuu 2008-02-20
  • 打赏
  • 举报
回复
bean的属性和数据库字段确信没写错?
jiangpeng84 2008-02-20
  • 打赏
  • 举报
回复
是不是<return alias="hibernate" class="test.Hibernate">
</return>
里要加什么return property这样的东西?求救啊...
jiangpeng84 2008-02-20
  • 打赏
  • 举报
回复
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));
jiangpeng84 2008-02-20
  • 打赏
  • 举报
回复
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));
jiangpeng84 2008-02-20
  • 打赏
  • 举报
回复
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





forestking_xx 2008-02-20
  • 打赏
  • 举报
回复
用 select hid,name from Hibernate也没事,也是读出对象的List?
这句话是什么意思啊?
我记得这样读出的是Object【】的List啊,
select name from Hibernate
读出的也应该是一个Object【】 的List,不过Object只有一个元素吧。
你要不然把你的代码贴出来看看。
cangyue87 2008-02-20
  • 打赏
  • 举报
回复
只读一列应该没问题啊,lz说说是什么问题啊....

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧