hibernate执行查询语句
场景:Hibernate执行查询语句出错!该如何处理
Hibernate执行查询语句出错!!!!
我两条hql查询语句
hql1= "form article order by pubtime desc "
hql2= "form article order by visitcount desc "
其中, article 是 mysql数据库中的一张表
其字段和类型如下:
pubtime(datatime), content(varchar), id(integer),
title(varchar), sortid(integer), visitcount(integer)
有的可以为空,有的不为空,不过在数据库里,所有字段都是有值的
然后我通过 session.createQuery(hql);这条语句来执行上面的语句
但是结果是:hql1可以运行,而hql2不可以运行
其错误只要提示,如下:
20:47:27,875 DEBUG ErrorCounter:68 - throwQueryException() : no errors
20:47:27,937 DEBUG QueryTranslatorImpl:216 - HQL: from com.ukey.Blog.Article order by visitcount desc
20:47:27,937 DEBUG QueryTranslatorImpl:217 - SQL: select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc
20:47:27,937 DEBUG ErrorCounter:68 - throwQueryException() : no errors
20:47:28,031 DEBUG HQLQueryPlan:269 - HQL param location recognition took 31 mills (from Article order by visitcount desc)
20:47:28,125 DEBUG QueryPlanCache:76 - located HQL query plan in cache (from Article order by visitcount desc)
20:47:28,140 DEBUG HQLQueryPlan:150 - find: from Article order by visitcount desc
20:47:28,140 DEBUG QueryParameters:277 - named parameters: {}
20:47:28,171 DEBUG AbstractBatcher:366 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
20:47:28,171 DEBUG SQL:401 - select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc limit ?
Hibernate: select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc limit ?
20:47:28,171 DEBUG AbstractBatcher:484 - preparing statement
20:47:28,218 DEBUG AbstractBatcher:382 - about to open ResultSet (open ResultSets: 0, globally: 0)
20:47:28,234 DEBUG Loader:694 - processing result set
20:47:28,234 DEBUG Loader:699 - result set row: 0
20:47:28,234 DEBUG Loader:1173 - result row: EntityKey[com.ukey.Blog.Article#1]
20:47:28,234 DEBUG Loader:1355 - Initializing object from ResultSet: [com.ukey.Blog.Article#1]
20:47:28,296 DEBUG AbstractEntityPersister:2031 - Hydrating entity: [com.ukey.Blog.Article#1]
20:47:28,328 DEBUG Loader:699 - result set row: 1
20:47:28,328 DEBUG Loader:1173 - result row: EntityKey[com.ukey.Blog.Article#8]
20:47:28,328 DEBUG Loader:1355 - Initializing object from ResultSet: [com.ukey.Blog.Article#8]
20:47:28,343 DEBUG AbstractEntityPersister:2031 - Hydrating entity: [com.ukey.Blog.Article#8]
20:47:28,546 INFO StringType:182 - could not read column value from result set: pubtime2_; Value '0000-00-00 ' can not be represented as java.sql.Timestamp
20:47:28,546 DEBUG AbstractBatcher:389 - about to close ResultSet (open ResultSets: 1, globally: 1)
20:47:28,546 DEBUG AbstractBatcher:374 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
20:47:28,546 DEBUG AbstractBatcher:533 - closing statement
20:47:28,593 DEBUG JDBCExceptionReporter:69 - could not execute query [select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc]
java.sql.SQLException: Value '0000-00-00 ' can not be represented as java.sql.Timestamp
请问这是为什么吗?
------解决方案--------------------
lz好像用的是mysql数据库把?就日志来看,执行的应该是hpl2而不是hpl1.。java.sql.SQLException:Value '0000-00-00 ' can not be represented as java.sql.Timestamp
可能是你的数据库中的pubtime字段 '0000-00-00 ' 就我知道mysql中的Timestamp 不允许 '0000-00-00 '
oracle或其他数据库中我不太清楚!
------解决方案--------------------
在java中没有mysql中的数据类型datetime,在jdbc中将datetime数据类型转换为Timestamp类型,lz可以查阅一下jdbc与mysql的数据类型之间的转换表。。
出现的问题应该就是我上面所说的,虽然是你手动输入的 '0000-00-00’不是合法的Timestamp类型。。。lz可以试着做些类型的转换工作。。good luck!!!
Hibernate执行查询语句出错!!!!
我两条hql查询语句
hql1= "form article order by pubtime desc "
hql2= "form article order by visitcount desc "
其中, article 是 mysql数据库中的一张表
其字段和类型如下:
pubtime(datatime), content(varchar), id(integer),
title(varchar), sortid(integer), visitcount(integer)
有的可以为空,有的不为空,不过在数据库里,所有字段都是有值的
然后我通过 session.createQuery(hql);这条语句来执行上面的语句
但是结果是:hql1可以运行,而hql2不可以运行
其错误只要提示,如下:
20:47:27,875 DEBUG ErrorCounter:68 - throwQueryException() : no errors
20:47:27,937 DEBUG QueryTranslatorImpl:216 - HQL: from com.ukey.Blog.Article order by visitcount desc
20:47:27,937 DEBUG QueryTranslatorImpl:217 - SQL: select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc
20:47:27,937 DEBUG ErrorCounter:68 - throwQueryException() : no errors
20:47:28,031 DEBUG HQLQueryPlan:269 - HQL param location recognition took 31 mills (from Article order by visitcount desc)
20:47:28,125 DEBUG QueryPlanCache:76 - located HQL query plan in cache (from Article order by visitcount desc)
20:47:28,140 DEBUG HQLQueryPlan:150 - find: from Article order by visitcount desc
20:47:28,140 DEBUG QueryParameters:277 - named parameters: {}
20:47:28,171 DEBUG AbstractBatcher:366 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
20:47:28,171 DEBUG SQL:401 - select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc limit ?
Hibernate: select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc limit ?
20:47:28,171 DEBUG AbstractBatcher:484 - preparing statement
20:47:28,218 DEBUG AbstractBatcher:382 - about to open ResultSet (open ResultSets: 0, globally: 0)
20:47:28,234 DEBUG Loader:694 - processing result set
20:47:28,234 DEBUG Loader:699 - result set row: 0
20:47:28,234 DEBUG Loader:1173 - result row: EntityKey[com.ukey.Blog.Article#1]
20:47:28,234 DEBUG Loader:1355 - Initializing object from ResultSet: [com.ukey.Blog.Article#1]
20:47:28,296 DEBUG AbstractEntityPersister:2031 - Hydrating entity: [com.ukey.Blog.Article#1]
20:47:28,328 DEBUG Loader:699 - result set row: 1
20:47:28,328 DEBUG Loader:1173 - result row: EntityKey[com.ukey.Blog.Article#8]
20:47:28,328 DEBUG Loader:1355 - Initializing object from ResultSet: [com.ukey.Blog.Article#8]
20:47:28,343 DEBUG AbstractEntityPersister:2031 - Hydrating entity: [com.ukey.Blog.Article#8]
20:47:28,546 INFO StringType:182 - could not read column value from result set: pubtime2_; Value '0000-00-00 ' can not be represented as java.sql.Timestamp
20:47:28,546 DEBUG AbstractBatcher:389 - about to close ResultSet (open ResultSets: 1, globally: 1)
20:47:28,546 DEBUG AbstractBatcher:374 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
20:47:28,546 DEBUG AbstractBatcher:533 - closing statement
20:47:28,593 DEBUG JDBCExceptionReporter:69 - could not execute query [select article0_.id as id2_, article0_.title as title2_, article0_.content as content2_, article0_.pubtime as pubtime2_, article0_.sortid as sortid2_, article0_.visitcount as visitcount2_ from article article0_ order by article0_.visitcount desc]
java.sql.SQLException: Value '0000-00-00 ' can not be represented as java.sql.Timestamp
请问这是为什么吗?
------解决方案--------------------
lz好像用的是mysql数据库把?就日志来看,执行的应该是hpl2而不是hpl1.。java.sql.SQLException:Value '0000-00-00 ' can not be represented as java.sql.Timestamp
可能是你的数据库中的pubtime字段 '0000-00-00 ' 就我知道mysql中的Timestamp 不允许 '0000-00-00 '
oracle或其他数据库中我不太清楚!
------解决方案--------------------
在java中没有mysql中的数据类型datetime,在jdbc中将datetime数据类型转换为Timestamp类型,lz可以查阅一下jdbc与mysql的数据类型之间的转换表。。
出现的问题应该就是我上面所说的,虽然是你手动输入的 '0000-00-00’不是合法的Timestamp类型。。。lz可以试着做些类型的转换工作。。good luck!!!