EJB3.0中查询boolean值的问题

用的是JBoss EJB3.0,其中的EJB-QL类似Hibernate,在网上搜到:

来源:http://www.programfan.com/club/showpost.asp?id=11375

我定义了一个类: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)
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属性全部以大写字母开头。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值