首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> J2EE >> EJB >> 正文

EJB3.0中查询boolean值的方法

我定义了一个类:HibernateBooleanDemo
    只有两个属性:id和enabled,分别是String和boolean类型,分别对应表中的id和isEnabled列。并编写了相应的get和set方法和DAO类。但是如下代码很奇怪:
    String hql = \"from HibernateBooleanDemo where isEnabled=false\";
    Session s = HibernateSessionFactory.getSession();
    Transaction t = s.beginTransaction();
    Query q = s.createQuery(hql);
    List list = q.list();
    System.out.println(list.size());
    System.out.println(((HibernateBooleanDemo)list.get(0)).isEnabled());
    t.commit();
    HibernateSessionFactory.closeSession();
    在上面的查询语句中写列名即isEnabled时可以正常运行。但是写属性enabled时,却抛出异常,大概意思是说不能解析该属性。
    一直不明白是什么原因。请大家指点
    【AmethystWish】:
    若\"from HibernateBooleanDemo where isEnabled=false\";写为\"from HibernateBooleanDemo where enabled=false\";错误如下:
    aused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column \'enabled\' in \'where clause\'
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3124)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1149)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1262)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
    at org.hibernate.loader.Loader.doQuery(Loader.java:662)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
    at org.hibernate.loader.Loader.doList(Loader.java:2145)
    ... 8 more


    【liandti】:
    from HibernateBooleanDemo h where h.enabled=false
    如果用属性就加别名

    【AmethystWish】:
    查询字符串改为:\"from HibernateBooleanDemo h where h.enabled=false\";之后运行,结果如下:
    Exception in thread \"main\" org.hibernate.QueryException: could not resolve property: enabled of: org.acman.demo.HibernateBooleanDemo [from org.acman.demo.HibernateBooleanDemo h where h.enabled=false]
    at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)[Page]
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
    at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1265)
    at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279)
    at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:372)
    at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:539)
    at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:221)
    at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:172)
    at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:94)
    at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:90)
    at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:725)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1215)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4032)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3518)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1758)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:776)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:577)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)

    【AmethystWish】:
    如果属性是其它类型的,如字符串类型的,运行就没有问题,如果是bool、boolean类型的就这样,不知道为什么。初学hibernante,应该有不知道的地方

    【AmethystWish】:
    已解决。错误总结:类映射文件中<property>元素的name属性对应类中属性的名字,要以小写字母开头。我使用HibernateSynchronizer工具自动生成类映射文件,name属性全部以大写字母开头。

    但是很奇怪,其它类型的属性没有问题,只有布尔类型的有问题。

 

【责编:Ken】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航