我想要查询auction_bid表里最大id的一条记录!下面是代码
public AuctionBid getMaxBid( ) {
Session session=null;
AuctionBid bid=null;
String hql="select top 1 {b.*} from auction_bid b order by ab_id desc";
try {
session=this.getSession();
SQLQuery q=session.createSQLQuery(hql).addEntity("b",AuctionBid.class);
List<AuctionBid>l=q.list();
bid=l.get(0);
} catch (HibernateException e) {
e.printStackTrace();
}
return bid;
}
下面是报错
Caused by: java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
映设文件也写了!
at org.hibernate.loader.Loader.list(Loader.java:2124)Hibernate: select top 1 b.AB_ID as AB1_2_0_, b.AU_USER_ID as AU2_2_0_, b.AP_PROD_ID as AP3_2_0_, b.AB_INDEX as AB4_2_0_, b.AB_CREATE_TIME as AB5_2_0_, b.AB_PRICE as AB6_2_0_ from auction_bid b order by ab_id desc
请问是什么原因?

解决方案 »

  1.   

    直接用max(id)不就完了,
    就是啊!
      

  2.   

    你ID是字符还是数字?
    数字的话直接MAX(ID);
      

  3.   

    建议楼主将select top 1 {b.*} from auction_bid b order by ab_id desc在数据库执行下,看是否有错,怀疑是你的SQL写得有问题,因为没见过用大括号括起来的
      

  4.   

    我同意他的想法。像咬对数据库操作,可以先在数据库本身检查语句是否有错,这是不错的解决bug的办法。
      

  5.   

    看错误信息:select top 1 b.AB_ID as AB1_2_0_, b.AU_USER_ID as AU2_2_0_, b.AP_PROD_ID as AP3_2_0_, b.AB_INDEX as AB4_2_0_, b.AB_CREATE_TIME as AB5_2_0_, b.AB_PRICE as AB6_2_0_ from auction_bid b order by ab_id desc这是最终在DB中要执行的SQL语句。DB是ORACLE的,但PL\SQL中是没有top关键字的!只有T-SQL中才有top关键字,所以错误就出来了。
    要达到想要的效果,最终生成的SQL应该是这样:select * from auction_bid b where b.ab_id = (select max(ab_id) from auction_bid);