在Hibernate中对于java.util.Date类型的映射为:
java类型 Hibernate类型 Mysql类型 java.util.Date、java.sql.Date date DATE java.util.Date、java.sql.Time time TIME java.util.Date、java.sql.Timestamp timestamp TIMESTAMP如果使用timestamp作为Date类型映射时,具体代码如下:
Java代码
public class User { private String userPK; private String userID; private String password; private String nickname; private boolean state; private boolean role; private Date registerDate; private int points; public String getUserPK() { return userPK; } private void setUserPK(String userPK) { this.userPK = userPK; } public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public Date getRegisterDate() { return registerDate; } public void setRegisterDate(Date registerDate) { this.registerDate = registerDate; } public int getPoints() { return points; } public void setPoints(int points) { this.points = points; } public void setState(boolean state) { this.state = state; } public boolean getState(){ return this.state; } public void setRole(boolean role) { this.role = role; } public boolean getRole(){ return this.role; }}
映射代码:
Xml代码
Java代码
User testUser = new User();testUser.setRegisterDate(new Date);session.save(testUser);
存储结束之后,由数据库中重新查询出此对象:
Java代码
User savedUser = session.load(User.class,id);
而此时
testUser.getRegisterDate.equals(savedUser.getRegisterDate)返回值为 false;
此时可发现test.getRegisterDate().class为java.util.Date, savedUser.getRegisterDate().class为java.sql.Timestamp。查看java的文档可知
java doc 写道
The Timestamp.equals(Object) method never returns true when passed an object that isn’t an instance of java.sql.Timestamp, because the nanos component of a date is unknown. As a result, the Timestamp.equals(Object) method is not symmetric with respect to the java.util.Date.equals(Object) method.
也就是说Timestamp和Date类型并不能进行相等比较的。当然在程序中比较两个时间点 的相等性是不切合实际的,但如果一些特殊应用需要比较的话,可以使用其他方法解决。 例如:
Java代码
public void setRegisterDate(Date registerDate) { this.registerDate = new Date(registerDate.getTime()); }
这样即可顺利转变类型及值了。但是Hibernate中并没有对java.util.Date类型进行很 好的映射,个人也觉得可以不采用Date类型记录时间,可适当考虑Calendar类型。
如果你曾歌颂黎明,那么也请你拥抱黑夜