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】:

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

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

因为在路上你就已经收获了自由自在的好心情。

EJB3.0中查询boolean值的方法

相关文章:

你感兴趣的文章:

标签云: