hibernate自动建表设定字段类型为数据库中为timestamp类型

1:项目需要,字段应该设计为timestamp类型,但自动建表后总是被设置为datetime(当时用的数据库为sqlserver)

Google后,在配置文件(Xxx.hbm.xml)中column添加

sql-type="timestamp" default="CURRENT_TIMESTAMP"

后自动创建表后字段被设定为timestamp,默认为当前时间。

完整字段配置:

<property name="recordTime" type="java.sql.Timestamp">
<column name="recordTime" not-null="true" sql-type="timestamp" default="CURRENT_TIMESTAMP"/>

</property>

2:如果是用注解配置呢?应该怎么配置呢?如下即可:

@Column(name = "currenttime",columnDefinition="timestamp",insertable=false,updateable=false)
private String currenttime;

3:上面注解的关键在:columnDefinition="timestamp",timestamp就是sqlserver中定义的时间戳的类型。


4:sqlserver字段类型,字段名,表名,数据库名是不区分大小写的,所以

columnDefinition="timestamp"

columnDefinition="TimeStamp"

columnDefinition="TIMESTAMP"

都是等价的,本人亲自测试过,读者不信也可以去试试。

5:insertable=false,updatable=false也是有用的,因为sqlserver中的timestamp是sqlserver自动产生的,所以即使是null值也是不允许插入的,不然插入数据的报时间戳显示插入错误。更新的时候亦是如此。

6:这里我们java中的数据类型是String类型,sqlserver中是timestamp,更新的时候,我发现会出问题,hibernate中报的是,String不能转化为integer,可见sqlserver中的timestamp本质就是一个16进制的整形数据。

7:用hibernate更新数据,如果样将查询出来的timestamp作为where条件,如

update table set fieldname=fieldvalue where id=? and currenttime=?

上面的currenttime一定是转化为十进制整形后的值,不然就会报string转化integer错误。

8:另外,本人还测试了一下mysql的timestamp,发现并不可用,mysql中的timestamp并不是整形的16进制数。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值