[英]What is wrong with my HQL Query?
我的HQL查詢有問題,但找不到。 也許有人可以幫我。 我已經搜索了整個論壇並在Google上進行了搜索,但是找不到對我的問題的好的答案。
這是我的班級大小的映射:
<?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 1, 2011 3:07:44 PM by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="be.digihash.java.servlets.database.Size" table="Size" catalog="wielsbeeksebcdb">
<id name="idSize" type="java.lang.Integer">
<column name="idSize" />
<generator class="identity" />
</id>
<property name="tshirtSize" type="string">
<column name="tshirtSize" length="45" not-null="true" />
</property>
<bag lazy="true" cascade="all" name="users">
<key column="idUser"/>
<one-to-many class="be.digihash.java.servlets.database.User"/>
</bag>
</class>
</hibernate-mapping>
我使用此代碼在表中選擇id = 1。
List tshirtSize = null;
try {
tx = session.beginTransaction();
tshirtSize = session.createQuery("SELECT size.tshirtsize FROM Size as size WHERE size.idSize='" + s + "'").list();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return tshirtSize.get(0).toString();
當我運行此代碼時,我得到一個NullPointerException。 當我在Netbeans中運行此查詢時,出現錯誤。
查詢:`SELECT size.tshirtsize FROM Size as size WHERE size.idSize ='1'``錯誤:
org.hibernate.QueryException: unexpected token: size.idSize.size [SELECT size.tshirtsize FROM be.digihash.java.servlets.database.Size as size WHERE size.idSize='1']
at org.hibernate.hql.classic.FromParser.token(FromParser.java:105)
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)
at org.hibernate.hql.classic.PreprocessingParser.token(PreprocessingParser.java:108)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:28)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:216)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:185)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
我的查詢出了什么問題?
順便說一下, FROM Size as size
可以完美地檢索數據庫中所有Size的對象。
刪除HQL中變量周圍的引號-這是一個整數(不是字符串):
"... WHERE size.idSize = " + s
如果是Integer,則無需添加引號。
試試這個
String hql = "SELECT size.tshirtsize FROM Size as size WHERE size.idSize=?";
List tshirtSize= session.createQuery(hql).setString(0,"123").list();
if(tshirtSize!=null && tshirtSize.size>0)
{
return tshirtSize.get(0).toString();
}
盡量不要使用別名size
,因為它是HQL中的保留字 ,用於獲取集合的大小(請參見Hibernate Docs中的內容 )。
嘗試使用查詢參數 ,它們將幫助您解決許多將來的問題。 還要在返回之前檢查tshirtSize
空性。 對於您的示例,這將是一個很好的方法:
List tshirtSize = null;
try {
tx = session.beginTransaction();
Query query = session.createQuery("SELECT s.tshirtsize FROM Size as s WHERE s.idSize = :idSize");
query.setInteger("idSize", s);
tshirtSize = query.list();
} catch (Exception e) {
System.out.println(e.getMessage());
}
if (tshirtSize != null) {
return tshirtSize.get(0).toString();
}
return null; // return new ArrayList(); would be perfectly valid
希望能幫助到你
試試這個: WHERE size.id = " + s
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.