求助:hibernate取date日期问题(实际得到前一天),使用的是myeclipse5.5生成po

9441 2008-07-31 11:16:36
目前在做工程中,页面存入日期(精确到天),sybase中使用sybase自身工具查看值无误,使用hibernate 3 获取后得到timestamp型数据值为前一天的23:59:59 997, 格式化后就变成前一天了。
如例:页面存入 2008-07-06 页面读取就成了2008-07-05.
使用hibernate获取的po中为2008-07-05 23:59:58 997

po是使用myeclipse5.5自动生成的,数据库中数据类型为date,po中数据类型为java.util.date.
工程使用了hibernate-spring-struts-sybase.
因为其他原因使用的是jtds1.2的sybase驱动。

我跟踪了代码的执行不知道为什么会这样(没有跟踪hibernate内部),在google搜索也没有找到相关问题。
是否是我缺少了一些配置?除了直接在代码中修正错误,还有别的办法么?

代码太长,多余的删掉了
po代码:
package cn.com.cssnj.ntsh.po;

import java.util.Date;

/**
* TFpHyyzkprdb generated by MyEclipse Persistence Tools
*/

public class TFpHyyzkprdb implements java.io.Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;

// Fields


private Date yyzhfzrq;

private Date swdjzrq;


// Constructors

/** default constructor */
public TFpHyyzkprdb() {
}

/** minimal constructor */
public TFpHyyzkprdb(String gzlh) {
this.gzlh = gzlh;
}

/** full constructor */
public TFpHyyzkprdb(String gzlh, String wjdm, String nsrsbh, String jjxz,
String bsrmc, String frmc, String frsfzh, String lxdh, String yhzh,
String khyh, String idKhyh, String yyzzhm, Date yyzhfzrq,
Date swdjzrq, String swdjzhm, String dlysjyxkzh, String slysjyxkzh,
Double ntghylwje, String zbysgj, String zyhzybgdzjzq,
String zbszzlmc, Integer snfpsyl, String nsrsqyj, String jbr,
String fzr, Date sqrq, String submitFlag, Date lrsj, String nsrmc) {
this.gzlh = gzlh;
this.wjdm = wjdm;
this.nsrsbh = nsrsbh;
this.jjxz = jjxz;
this.bsrmc = bsrmc;
this.frmc = frmc;
this.frsfzh = frsfzh;
this.lxdh = lxdh;
this.yhzh = yhzh;
this.khyh = khyh;
this.idKhyh = idKhyh;
this.yyzzhm = yyzzhm;
this.yyzhfzrq = yyzhfzrq;
this.swdjzrq = swdjzrq;
this.swdjzhm = swdjzhm;
this.dlysjyxkzh = dlysjyxkzh;
this.slysjyxkzh = slysjyxkzh;
this.ntghylwje = ntghylwje;
this.zbysgj = zbysgj;
this.zyhzybgdzjzq = zyhzybgdzjzq;
this.zbszzlmc = zbszzlmc;
this.snfpsyl = snfpsyl;
this.nsrsqyj = nsrsqyj;
this.jbr = jbr;
this.fzr = fzr;
this.sqrq = sqrq;
this.submitFlag = submitFlag;
this.lrsj = lrsj;
this.nsrmc = nsrmc;
}

// Property accessors

public Date getYyzhfzrq() {
return this.yyzhfzrq;
}

public void setYyzhfzrq(Date yyzhfzrq) {
this.yyzhfzrq = yyzhfzrq;
}

public Date getSwdjzrq() {
return this.swdjzrq;
}

public void setSwdjzrq(Date swdjzrq) {
this.swdjzrq = swdjzrq;
}
}
////////////////////////////////////////////////////////////////
hbm.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="cn.com.cssnj.ntsh.po.TFpHyyzkprdb" table="t_fp_hyyzkprdb" schema="dbo" catalog="nsfw">
<id name="gzlh" type="java.lang.String">
<column name="GZLH" length="21" />
<generator class="assigned" />
</id>
<property name="yyzhfzrq" type="java.util.Date">
<column name="YYZHFZRQ" length="10" />
</property>
<property name="swdjzrq" type="java.util.Date">
<column name="SWDJZRQ" length="10" />
</property>
</class>
</hibernate-mapping>
/////////////////////////////////
调用在这里:
import java.util.Date;
import cn.com.cssnj.ntsh.po.TFpHyyzkprdb;

TFpHyyzkprdb po = null;
po = (TFpHyyzkprdb)this.ihibernatedao.findByPk("cn.com.cssnj.ntsh.po.TFpHyyzkprdb", gzlh);
//////////////////////////
/**
* 根据对象键值返回对象实例。
*/
public Object findByPk(String className, Serializable pk) throws Exception {
LogUtil.debug("getting obj instance with pk: ");
try {
Object instance = (Object) getHibernateTemplate()
.get(className, pk);
return instance;
} catch (RuntimeException re) {
LogUtil.error("get failed", re.fillInStackTrace());
throw re;
}
}
...全文
679 20 打赏 收藏 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
dynastytan 2008-09-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pblynx 的回复:]
你po中数据类型为java.util.date更改为timestamp看看
[/Quote]
支持
9441 2008-09-10
  • 打赏
  • 举报
回复
经测试发现是数据库中数据类型有问题

把所有的DATE型改成datetime型就没问题了
lxzooz 2008-09-06
  • 打赏
  • 举报
回复
应该是存放时候的问题,你存的时候就是前一天的日期,取的时候自然取得也是前一天。

你试试:存一个日期(时分秒不看),看数据库里对不对。
maodie007 2008-09-05
  • 打赏
  • 举报
回复
当你存入 2008-07-06 时 试下存入 2008-07-06 00:00:00 看?
sclink 2008-09-05
  • 打赏
  • 举报
回复
你系统时间不对,你用的vista么
kaoaohappy 2008-08-28
  • 打赏
  • 举报
回复
还是没弄明白
9441 2008-08-28
  • 打赏
  • 举报
回复
顶一下
zhuyx808 2008-08-20
  • 打赏
  • 举报
回复
啊哦
pblynx 2008-08-07
  • 打赏
  • 举报
回复
你po中数据类型为java.util.date更改为timestamp看看
zou_wei_forever 2008-08-06
  • 打赏
  • 举报
回复
9楼主意不错,可以试一下!
愤怒的小蒋 2008-08-05
  • 打赏
  • 举报
回复
o(∩_∩)o...哈哈 ls的太有意思了
zypeer 2008-08-04
  • 打赏
  • 举报
回复
取出的天加上1就行了 就是这样的
qlrhoo 2008-08-01
  • 打赏
  • 举报
回复
页面中存入的日期,精确到天,只是截取了前面的字符串啊
没有什么深奥的
9441 2008-08-01
  • 打赏
  • 举报
回复
就像6楼说的那样
您7楼说的是什么意思,不是很懂啊
imasmallbird 2008-08-01
  • 打赏
  • 举报
回复
你库里是“时间戳”,你存的是日期,是不是和这个有关系??
imasmallbird 2008-08-01
  • 打赏
  • 举报
回复
sybase中使用sybase自身工具查看值无误,
是指前台入库的日期在数据库中查看时,与输入的日期一样??


使用hibernate 3 获取后得到timestamp型数据值为前一天的23:59:59 997,
若是上面查看数据库中的是对的,你从数据库中得到的持久化数据就成了前一天的23:59:59 997??

有点迷糊。。

9441 2008-08-01
  • 打赏
  • 举报
回复
发现修改不了
9441 2008-08-01
  • 打赏
  • 举报
回复
楼上的楼上没有看明白我的意思,我存的就是日期java.util.date(不带时分秒),取出来就变成了前一天。
根本就不该出现那个带时分秒的数据。

我修改一下上面的问题,说得更清楚些。
zhang_man 2008-08-01
  • 打赏
  • 举报
回复
不好意思,没看懂,水平太差呀!!!一起学习吧!!!不知楼上的帖子有没有作用呀.
内容概要:本文档针对2026年华为杯研究生数学建模竞赛C题“服务于脑机接口与精神性疾病诊断的脑电图计算模型”,系统性地提供了从解题思路、算法实现到论文撰写的全流程支持资源。内容聚焦脑电信号(EEG)的数据预处理、特征提取、分类建模与结果分析,融合机器学习与深度学习技术(如SVM、CNN、LSTM、Transformer等),构建高精度的脑电识别模型,服务于抑郁症、癫痫等精神疾病的智能辅助诊断及脑机接口的信息解析。文档还整合了MATLAB与Python代码资源、模型实现案例及多领域科研技术支持体系,涵盖智能优化、信号处理、路径规划、通信优化等方向,并提供网盘资料下载与在线目录导航,强化理论与实践的深度融合; 适合人群:参加全国研究生数学建模竞赛的硕士、博士研究生,从事脑电信号处理、智能医学、生物信息学研究的科研人员,以及具备一定编程与数据分析基础、致力于人工智能在医疗健康领域应用的高校学生与青年学者; 使用场景及目标:① 快速掌握华为杯C题的技术路线与建模范式,高效完成竞赛备赛;② 构建面向临床辅助诊断的脑电计算模型,推动脑机接口与精神疾病识别的算法创新;③ 借助提供的开源代码与建模框架,开展科研复现、算法优化与学术论文写作; 阅读建议:建议结合文档提供的在线资源目录与百度网盘资料系统学习,优先精读脑电信号去噪、特征工程构建与深度学习模型选型部分,动手运行并调试代码,通过对比不同模型性能深化对算法适用性与工程实现细节的理解,同时关注跨学科方法的融合应用。

58,439

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧