求助: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;
}
}
...全文
559 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
  • 打赏
  • 举报
回复
不好意思,没看懂,水平太差呀!!!一起学习吧!!!不知楼上的帖子有没有作用呀.

58,454

社区成员

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

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