Java 我的HQL查询有什么问题?

Java 我的HQL查询有什么问题?,java,mysql,hibernate,Java,Mysql,Hibernate,我的HQL查询有问题,无法找到它。也许这里有人能帮我。我已经搜索了整个论坛和谷歌,但没有找到一个很好的答案,我的问题 这是我的班级规模的映射: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> &l

我的HQL查询有问题,无法找到它。也许这里有人能帮我。我已经搜索了整个论坛和谷歌,但没有找到一个很好的答案,我的问题

这是我的班级规模的映射:

<?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>
当我运行这段代码时,我得到一个NullPointerException。当我在Netbeans中运行这个查询时,我得到一个错误

查询:`SELECT size.tshirtsize FROM size as size WHERE size.idSize='1'`` 错误:

org.hibernate.QueryException:意外标记:size.idSize.size[从be.digihash.java.servlets.database.size中选择size.tshirtsize作为size WHERE size.idSize='1']
位于org.hibernate.hql.classic.FromParser.token(FromParser.java:105)
位于org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)
位于org.hibernate.hql.classic.PreprocessingParser.token(PreprocessingParser.java:108)
位于org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:28)
位于org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:216)
位于org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:185)
在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:77)
在org.hibernate.engine.query.HQLQueryPlan.(HQLQueryPlan.java:56)
位于org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
位于org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
位于org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
位于org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
我的问题有什么错


顺便说一下,
FROM Size as Size
非常适合检索数据库中所有大小的对象。

删除HQL中变量周围的引号-它是一个整数(不是字符串):


删除HQL中变量周围的引号-它是一个整数(不是字符串):


如果是整数,则不需要添加引号

这样试试

 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();
  }

如果是整数,则不需要添加引号

这样试试

 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();
  }

尝试以下操作:
WHERE size.id=“+s
尝试以下操作:
WHERE size.id=“+s
尝试不要使用别名
size
,因为它是HQL中用于获取集合大小的保留字(请参见中)

尝试使用查询参数,它们将帮助您解决未来的许多问题。在返回之前,还要检查
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

希望它有帮助

尽量不要使用别名
size
,因为它是HQL中用于获取集合大小的保留字(请参见中)

尝试使用查询参数,它们将帮助您解决未来的许多问题。在返回之前,还要检查
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

希望有帮助

这仍然不起作用。这与我的映射有关吗?我在用户包上设置了lazy=true?这仍然不起作用。这与我的映射有关吗?我在用户包上设置了lazy=true?
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