Xice 2013-04-11 09:30 采纳率: 100%
浏览 511
已采纳

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,就会进行插入,这时就会报错,主键唯一约束的错误。
请大家帮忙看看,有没有什么好的解决办法???

  • 写回答

3条回答 默认 最新

  • jinbingchuan 2013-04-11 09:41
    关注

    你可以看下官方文档

    需要重写联合主键类的hashcode()和equals()
    hashcode()只需要返回其中一个String类型的hashcode就行
    equals()需要判断联合主键类的各个属性都相同,才能返回true,反之.

    给你一个例子
    http://yangfei520.blog.51cto.com/1041581/310555

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料