相关文章
更多最近更新
更多hibernate3处理mqsql数据库decimal类型比较查询出错
2019-03-25 13:49|来源: 网路
项目中用到别人创建的数据库,不能修改数据库结构,商品表中有个销售价格字段 sell_price decimal(11,2),要对它进行比较查询,大致就是要查价格处于什么范围的商品,这里以大于或等于为例(即最低价格)。Condition类未查询条件类,里面有id和minPrice等属性。我用hibernate3操作数据库,报出如下错误,请知道解决办法的仁兄不灵赐教,不胜感激。
实现代码
错误内容
问题补充:
谢谢你的回答!已经找到错误所在了。其实是一个低级错误,将数据库字段sell_price改成映射后对象的属性sellPrice就解决了,decimal类型的可以映射成java的Double类型,MyEclipse反向工程生成的就是这样。我先是用NetBeans生成的hibernate配置文件decimal对应的是BigDecimal,其他的类型对应也不够规范。
实现代码
public List<Products> getProductsList(Condition condition){ String hql = "FROM Products p WHERE 1=1 AND p.pid=:id AND p.sell_price >= :min" Query query = getSession().createQuery(hql); query.setLong("id", condition.getId()); query.setBigDecimal("min", condition.getMinPrice()); //query.setDouble("min", condition.getMinPrice().floatValue()); } Condition c = new Condition(); c.setId(2); BigDecimal min= new BigDecimal("20.00"); c.setMinPrice(min);
错误内容
Exception in thread "main" org.hibernate.QueryException: could not resolve property: sell_price of: com.boling.model.pojo.Products [FROM com.boling.model.pojo.Products p WHERE 1=1 AND p.pid=:id AND p.sell_price >= :min] at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:44) at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:38) at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1358) at org.hibernate.hql.ast.tree.FromElementType.getPropertyType(FromElementType.java:279) at org.hibernate.hql.ast.tree.FromElement.getPropertyType(FromElement.java:386) at org.hibernate.hql.ast.tree.DotNode.getDataType(DotNode.java:566) at org.hibernate.hql.ast.tree.DotNode.prepareLhs(DotNode.java:241) at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:188) 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:728) at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1216) at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4041) at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3645) at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1762) at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1690) 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) at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229) at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228) at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160) at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111) 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) at com.boling.model.impl.ProductManagerImpl.getProductsList(ProductManagerImpl.java:130) at com.boling.model.impl.ProductManagerImpl.main(ProductManagerImpl.java:225) Java Result: 1
问题补充:
ekian 写道
要把decimal类型的sell_price 转换成float类型的,才可以
谢谢你的回答!已经找到错误所在了。其实是一个低级错误,将数据库字段sell_price改成映射后对象的属性sellPrice就解决了,decimal类型的可以映射成java的Double类型,MyEclipse反向工程生成的就是这样。我先是用NetBeans生成的hibernate配置文件decimal对应的是BigDecimal,其他的类型对应也不够规范。
相关问答
更多-
我给了你我毕业项目 oracle的 脚本在里面
-
JAva数据库问题:数据库的time字段是datetime类型,如何查询某一天的数据?[2022-08-08]
SELECT * FROM TABLE1 WHERE DATETIME LIKE '2010-10-10%' 模糊匹配,你试试! 祝好运!---------^-^臭即是香^-^! -
数据库中,Decimal数据类型,精度指的是什么意思?谢谢[2024-04-22]
p (有效位数) 可储存的最大十进位数总数,小数点左右两侧都包括在内。 s (小数位数) 小数点右侧所能储存的最大十进位数。 所以能取得最大数是38位都在小数点左边即10的38次方-1,同理最小-10的38次方+1 -
将调试器应用于Hibernate代码后,它已修复! 它在问题的文本中不可见,但问题是传递给createCriteria()方法的Place来自配置XML文件中指定的另一个包,而不是com/example/data 。 Hibernate调用Class.isAssignableFrom() ,如果返回false,它将以静默方式退出,从而断开连接。 我将为Hibernate开发人员打开这个问题的门票。 After applying debugger to the Hibernate code, it is fi ...
-
如果执行到达第x行而不是第x+2行,则第x+1必须引发异常,无限期地阻塞/循环,强制终止该线程,或者调用vm exit例程。 其中,最有可能的是它引发了例外。 如果您没有看到错误,那么您可能拥有吞噬异常的代码,例如: try { ... } catch { // Ignore exception } 要么就是这样,要么它可能会被记录在某个地方并且您不会查看日志。 检查应用服务器日志以获取详细信息 您没有提到您正在使用的应用服务器,因此我无法对此进行更具体的说明。 如果您无法以这种方式识别问 ...
-
Maven不编译target / hibernate3 / generated-sources(Maven doesn't compile target/hibernate3/generated-sources)[2023-04-07]
惯例是在target/generated-sources/生成代码,所以在你的情况下,我会在target/generated-sources/hibernate3 (很遗憾hibernate3插件默认不遵循这个约定)。 事情,事情应该工作,实际上,我在上一个答案中发布的POM(我重新运行我的示例项目,它肯定有效)。 你能成为MHIBERNATE-104的受害者吗? 老实说,我很困惑。 作为一种解决方法,您可以使用Build Helper Maven插件及其build-helper:ad ... -
Hibernate只不过是ORM,如果Hibernate让你改变使用不同的数据库,那么我会放弃那个ORM,但是hibernate最有可能支持所有常见的数据库,请参见此处 。 选择数据库比为此选择ORM更重要。 Hibernate配置对于大多数db来说都很简单(我没有用所有dbs检查hibernate)。 使用mysql你可能遇到麻烦的事务,它不是因为hibernate,而是因为mysql使用的引擎(我相信MyIsam不支持而且InnoDB确实支持事务)。 因此,选择最适合的数据库并使用hibernate。 ...
-
做以下(有点hacky tho) Class clazz = ...; SessionFactory sessionFactory = ...; ClassMetadata classMetadata = sessionFactory.getClassMetadata( clazz ); // bit of a hack, relies on knowing that SessionFactoryImpl implements Mapping Mapping ma ...
-
你可以这样写 日期startDate = 2014-03-01 日期endDate = 2014-03-31 Criteria criteria = getSession()。createCriteria(getDomainClass()); criteria.add(Restrictions.between(“date”,startDate,endDate)); (要么) 如果您的日期格式为“YYYY-MM-DD” String date =“2014-03”; Criteria criteria = g ...
-
如果有人遇到这篇文章,并想知道答案是否定的! context.Database.UseTransaction(null); 与在ExecuteSqlCommand重载方法上使用TransactionalBehavior.DoNotEnsureTransaction 。 但是,以下工作确实有效,可以按原来的方式使用: ((IObjectContextAdapter)_context).ObjectContext.ContextOptions.EnsureTransactionsForFunctionsAnd ...