这个问题网上基本没有答案,google倒是有一个论坛有相同问题,但是解决方案不行,经过几天奋战,基本了解了。
首先,后台使用的是 struts2,hibernate3,spring3.4 具体问题提示请戳 http://bbs.youkuaiyun.com/topics/390750850
org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not execute query; uncategorized SQLException for SQL [select calendar_t0_.Cale_id as Cale1_1_, calendar_t0_.Year_Begin as Year2_1_, calendar_t0_.Year_End as Year3_1_, calendar_t0_.Weeks as Weeks1_, calendar_t0_.Weeks_Begin as Weeks5_1_, calendar_t0_.Weeks_End as Weeks6_1_ from T_SchoolYear calendar_t0_ where calendar_t0_.Year_Begin='2013' and calendar_t0_.Year_End='2014']; SQL state [null]; error code [0]; 不支持从 date 到 BINARY 的转换。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 不支持从 date 到 BINARY 的转换。
一个查询语句,里面并没有涉及到binary字段,实体类型也没有涉及binary,怎么会转换binary呢,第一猜想估计是hibernate将查询到的结果保存到缓存中,后查阅网上资料,发现hibernate默认一级缓冲是没开启的,二级缓冲我也没开,这个也就排除了。仔细查询资料 有人建议是将日期字段用ISNULL()函数将查询到的空date类型赋值,避免是查询空值的情况,但是我查询出来的值是有的,不存在空值,后面又查资料,找到java.hibernate sqlserver之间类型转换的文章,这才有点眉目,
如下:
六、hibernate映射类型
1.内置映射类型
Hibernate | java | sql | 取值范围 |
integer int | int Integer | INTEGER | 4 |
long | long Long | BIGINT | 8 |
short | short Short | SMALLINT | 2 |
byte | byte Byte | TINYINT | 1 |
float | float Float | FLOAT | 4 |
double | double Double | DOUBLE | 8 |
big_decimal | java.math.BigDecinimal | NUMERIC | 8位含2位小数部分 |
character | char Character String | CHAR(1) | 定长字符 |
string | String | VARCHAR | 变长串 |
boolean | boolean Boolean | BIT | 布尔 |
yes_no | boolean Boolean | CHAR(1) | 布尔 |
true_false | boolean Boolean | CHAR(1) | 布尔 |
?
2.Java时间和日期类型
Hibernate | java | sql | 取值范围 |
date | util.Date sql.Date | DATE | YYYY-MM-DD |
time | util.Date sql.Time | TIME | HH:MM:SS |
timestamp | util.Date sql.timestamp | TIMESTAMP | YYYYMMDDHHMMSS |
calendar | java.util.Calendar | TIMESTAMP | YYYYMMDDHHMMSS |
calendar_date | java.util.Calendar | DATE | YYYY-MM-DD |
?
3. 大对象类型的映射
Hibernate | java | sql |
binary | byte[] | VARBINARY(BLOB) |
text | String | CLOB |
serializable | 实现类 | BARBINARY(BLOB) |
然后我将实体文件的sql.date类型改为util.date,数据库date,改为datetime 刚刚可以配好格式,也算不是办法的办法把,
至于为什么会出现binary类型转换,在处理日期的时候 我也不清楚,忘网友解答,不胜感激