日期:2014-05-19  浏览次数:20691 次

怎么处理Hibernate里的date类型?
不是我不会处理,而是师傅说了“如果害怕出错的话,可以将除了主键Id之外的所有字段设为String类型,包括Date类型”,但我觉得这样不妥,请大家谈谈自己的看法吧!

------解决方案--------------------
怎么会出错了回复内容太短了!
------解决方案--------------------
hibernate可以用java.sql.Date
------解决方案--------------------
探讨
我知道,我是在想用在数据库中用String代替date类型是否合适?

------解决方案--------------------
http://blog.csdn.net/smartcat86/archive/2008/01/29/2070821.aspx

楼主 看看这里的 介绍
------解决方案--------------------
当然不能这么做了!

比如有一个字段是金额,那我要求总金额,你用 varchar 了那怎么 sum 呢?
------解决方案--------------------
比如说,date 类型在 Oracle 中占用 7 个字节,如果采用 varchar2 的话,年月日时分秒,加上分隔符 2010-03-01 23:39:00 需要占用 19 个字节,占用空间增加了 12 个字节。不仅如此,这个日期只能以这种格式进行显示,要更改显示格式的话,比如说不需要秒,那就要进行字符串处理。

如果把一个字符串式的日期存入数据库中,并且程序中也没有进行校验的话,那对数据的正确性会产生威害。

另外,其实现在有很多的应用,主键用的都是字符串呢,比如主键使用 UUID。主键使用 UUID 有利也有弊,对此正反双方都是争论不休的。
------解决方案--------------------
如果只是一个主键,想建非聚集索引怎么办?你这个什么师傅啊?
我用的是SQL Server,关于数据字段的存储原理,请看我的读书笔记,相信你不会有些问题。
http://blog.csdn.net/downmoon/archive/2010/01/26/5256548.aspx
------解决方案--------------------
对不起,最后一句应该是:
相信会解决你类似的这些疑惑。
------解决方案--------------------
探讨
比如说,date 类型在 Oracle 中占用 7 个字节,如果采用 varchar2 的话,年月日时分秒,加上分隔符 2010-03-01 23:39:00 需要占用 19 个字节,占用空间增加了 12 个字节。不仅如此,这个日期只能以这种格式进行显示,要更改显示格式的话,比如说不需要秒,那就要进行字符串处理。

如果把一个字符串式的日期存入数据库中,并且程序中也没有进行校验的话,那对数据的正确性会产生威害。

另外,其实现在有很多的应用,主键用的都是字符串呢,比如主键使用 UUID。主键使用 UUID 有利也有弊,对此正反双方都是争论不休的。

------解决方案--------------------
另问:Date类型有啥麻烦的?...
------解决方案--------------------
我也来学习了,呵呵。
平常我也用的date转String辅以字符串操作来应付几种时间格式的需求,下次得改用Date了。
------解决方案--------------------
不用那样用的
Date转为String后,Date的大小比较,排序问题就变得很麻烦
------解决方案--------------------
hibernate难道不能处理date?
------解决方案--------------------
探讨
hibernate难道不能处理date?

------解决方案--------------------
自己做一个类型转换器, 
Java code

public class DateConverter implements Converter {

    public Object convert (Class type, Object value) {
        if (value == null) {
            return value;
        }
        if (value instanceof java.util.Date) {
            return value;
        }
        if (value instanceof String) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date d = sdf.parse((String)value);
            return d;
        }
    }
    
    //注册转换器
    public void init() {
        ConvertUtils.register(new DateConverter

------解决方案--------------------
实体类中的日期用的java.util.Date,在实体类的映射文件里边这么写class=java.util.Date,
oracle是自己的Date类型,长度默认为7
------解决方案--------------------
为什么给 某个字段的get方法加上 @Temporal(TemporalType.TIMESTAMP) 这个注解后,在
@Column(name = "xxx_DATE", nullable = false, length = 7)指定他的长度为7 就没有用了呢
------解决方案--------------------