hibernate3.3+mysql日期格式Date类型,无法进行相等的比较
hibernate3.3+mysql,数据库表是联合主键,其中一个为Date类型。此时对日期进行比较时,结果不正确。应该如何修改?
表结构:
CREATE TABLE temp
(room_id
int(11) NOT NULL,priceDate
date NOT NULL,value
varchar(20) DEFAULT NULL,
PRIMARY KEY (room_id
,priceDate
)
);
映射文件:
测试代码大致如下:
Date tempDate = DateUtils.parseDate("2013-04-10");
TempId id = new TempId(1, tempDate);
Temp temp = new Temp(id, "123");
save(temp);
Temp savedTemp = load(Temp.class, id);
System.out.println(savedTemp);
------预计结果------
Temp@*****
------实际结果------
null
测试代码里的save和load,都是直接使用的getHibernateTemplate()里的save和load。
日期转换DateUtils.parseDate是用的SimpleDateFormat将字符串转为日期,格式为yyyy-MM-dd。
为什么load不到结果呢?原有的数据库设计就是这样的,目前无法进行结构与类型的修改。
现在需要对这样的表进行批量新增与更新数据,这时hibernate会自动使用load方法去根据ID判断是否存在数据,如果load结果为null,就会进行插入,这时就会报错,主键唯一约束的错误。
请大家帮忙看看,有没有什么好的解决办法???
你可以看下官方文档
需要重写联合主键类的hashcode()和equals()
hashcode()只需要返回其中一个String类型的hashcode就行
equals()需要判断联合主键类的各个属性都相同,才能返回true,反之.
重新TypeId的equals()和hashcode(),你可以参考一下《深入浅出hibernate 》的复合主键一节,[url]http://ishare.iask.sina.com.cn/f/23245490.html?from=like[/url]
重写com.boang.hotel.entity.TempId类的equals和hashcode方法