hibernate中java.util.Date类型映射

在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类型。

如果你曾歌颂黎明,那么也请你拥抱黑夜

hibernate中java.util.Date类型映射

相关文章:

你感兴趣的文章:

标签云: