2011-02-10 90 views
0

我测试下面的HQL,但得到一个错误错误当写Hibernate的HQL

String SQL="From Bid bid where bid.Auction.AuctionId=3655" 

类投标映射文件:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Jan 19, 2011 5:25:35 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="com.BiddingSystem.Models.Bid" table="BID"> 
     <id name="BidId" type="long"> 
      <column name="BIDID" /> 
      <generator class="native" /> 
     </id> 
     <property name="BidAmount" type="long"> 
      <column name="BIDAMOUNT" /> 
     </property> 
     <many-to-one name="User" class="com.BiddingSystem.Models.Users" fetch="join"> 
      <column name="UserId" /> 
     </many-to-one> 
     <many-to-one name="auction" class="com.BiddingSystem.Models.Auction" fetch="join" lazy="false"> 
      <column name="AuctionId" /> 
     </many-to-one> 
     <property name="TimePosted" type="java.util.Date" access="field"> 
      <column name="TIMEPOSTED" /> 
     </property> 
    </class> 
</hibernate-mapping> 

拍卖映射文件:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 28, 2010 9:14:12 PM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="com.BiddingSystem.Models.Auction" table="AUCTION"> 
     <id name="AuctionId" type="long"> 
      <column name="AUCTIONID" /> 
      <generator class="native" /> 
     </id> 
     <property name="StartTime" type="java.util.Date"> 
      <column name="STARTTIME" /> 
     </property> 
     <property name="EndTime" type="java.util.Date"> 
      <column name="ENDTIME" /> 
     </property> 
     <property name="DatePlaced" type="java.util.Date"> 
      <column name="DatePlaced" /> 
     </property> 
     <property name="StartingBid" type="long"> 
      <column name="STARTINGBID" /> 
     </property> 
     <property name="MinIncrement" type="long"> 
      <column name="MININCREMENT" /> 
     </property> 
     <many-to-one name="CurrentItem" class="com.BiddingSystem.Models.Item" fetch="join" not-null="true" cascade="all" unique="true" lazy="false"> 
      <column name="CURRENTITEM" /> 
     </many-to-one> 

     <property name="AuctionStatus" type="java.lang.String"> 
      <column name="AUCTIONSTATUS" /> 
     </property> 
     <property name="BestBid" type="long"> 
      <column name="BESTBID" /> 
     </property> 
     <many-to-one name="User" class="com.BiddingSystem.Models.Users" fetch="join"> 
      <column name="UserId" /> 
     </many-to-one> 
    </class> 
</hibernate-mapping> 

错误:

Caused by: org.hibernate.QueryException: could not resolve property: Auction of: com.BiddingSystem.Models.Bid [From com.BiddingSystem.Models.Bid bid where bid.Auction.AuctionId=3655 and bid.User.UserId=3657] 
    at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81) 
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75) 
    at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1449) 
    at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:315) 
    at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:487) 
    at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:611) 
    at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:263) 
    at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:210) 
    at org.hibernate.hql.ast.tree.DotNode.resolveFirstChild(DotNode.java:175) 
    at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:571) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4774) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1326) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3944) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1972) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:831) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124) 
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770) 
    at com.BiddingSystem.server.ServiceImpl.getBid(ServiceImpl.java:1463) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at net.sf.gilead.gwt.PersistentRemoteService.processCall(PersistentRemoteService.java:174) 

回答

1

我敢打赌,这将工作

String SQL="From Bid bid where bid.auction.auctionId=3655" 

属性都应该总是在Java小写字符开始。

+0

谢谢你放在轨道上的工作sql是字符串SQL =“从出价bid.auction.AuctionId = 3655” – Noor 2011-02-10 20:06:53

+0

是否有可能做这样的事情从出价中选择不同的bid.auction – Noor 2011-02-10 20:13:19

2

根据您Bid映射文件,你的SQL应该是这样的: -

String SQL="From Bid bid where bid.auction.AuctionId=3655" 

但严重的是,你的骆驼外壳在豆类真的搞砸了。在bean 属性名应当小字母开头第一(例如:auctionIdauctiontimePosted等)。