hibernate自动建表设定字段类型为数据库中为timestamp类型
2016-09-11 16:55
537 查看
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进制数。
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进制数。
相关文章推荐
- TIMESTAMP和DATETIME哪个好
- oracle SCN跟TIMESTAMP之间转换
- C#更新SQLServer中TimeStamp字段(时间戳)的方法
- MySQL 5.6 中 TIMESTAMP有那些变化
- MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecated错误
- mysql之TIMESTAMP(时间戳)用法详解
- MySQL timestamp自动更新时间分享
- Sqlserver timestamp数据类使用介绍
- mysql多个TimeStamp设置的方法解读
- Java中Date,Calendar,Timestamp的区别以及相互转换与使用
- MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数
- Mysql中的Datetime和Timestamp比较
- MySQL错误TIMESTAMP column with CURRENT_TIMESTAMP的解决方法
- MySQL 5.6 中 TIMESTAMP 的变化分析
- mysql 数据类型TIMESTAMP
- 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
- 在Java中String和Date、Timestamp之间的转换
- Android中时间标签起点
- HBase 系统架构
- python UNIX_TIMESTAMP时间处理方法分析