在公司处理一个 php 的项目, 要用 java 重新实现底层的逻辑功能. 碰到这样一个很蛋疼的情况:
以前的数据库设计非常混乱, User表中, 关于注册时间有如下两个字段, 表示重复的功能:
reg_date int(8) 示例”20130101”
add_time char(8) 示例”2013-01-01 23:59:59”
同样在user表中, 存在着各种奇怪的时间格式
birthday char(10) 示例”20130101”
web_time char(20)
congeal_time char(10)
last_time char(20)
stat_time char(20)
order_consume_time int(11)
final_mail_time int(11)
subscribe_time int(10)
更奇怪的是, 同样是add_time, 表示添加时间, 在不同的表里有完全不同的时间格式, 长度也不同:
User表:
add_time char(20) 示例”2013-01-01 23:59:59”
mark_record表:
add_time int(11), 1970-01-01至今的秒数
user_size表:
create_time int(10), 1970-01-01至今的秒数
看到这种数据库, 直接崩溃了. 没办法, 历史遗留问题, 一定要处理的, 我这里的解决方案是, 在 hibernate 的映射 VO 定义中, 对一些恶心的字段进行封装
1 |
|
代码只列出关于时间的操作. 创建一个 Date 类型的 createTime, 作为唯一的 public set 操作. createTimeFuckInt, createTimeFuckString 这两个字段分别对应着映射到数据库的列, 但将 set 方法设置为 private的.
这里注意一个细节, 在定义 createTime 时, 要添加 @Transient, 来申明这个树形在数据库中不做映射操作.
1 | /** |