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条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算