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代码
  1. public class User {   
  2.     private String userPK;   
  3.     private String userID;   
  4.     private String password;   
  5.     private String nickname;   
  6.     private boolean state;   
  7.     private boolean role;   
  8.     private Date registerDate;   
  9.     private int points;   
  10.     public String getUserPK() {   
  11.         return userPK;   
  12.     }   
  13.     private void setUserPK(String userPK) {   
  14.         this.userPK = userPK;   
  15.     }   
  16.     public String getUserID() {   
  17.         return userID;   
  18.     }   
  19.     public void setUserID(String userID) {   
  20.         this.userID = userID;   
  21.     }   
  22.     public String getPassword() {   
  23.         return password;   
  24.     }   
  25.     public void setPassword(String password) {   
  26.         this.password = password;   
  27.     }   
  28.     public String getNickname() {   
  29.         return nickname;   
  30.     }   
  31.     public void setNickname(String nickname) {   
  32.         this.nickname = nickname;   
  33.     }   
  34.     public Date getRegisterDate() {   
  35.         return registerDate;   
  36.     }   
  37.     public void setRegisterDate(Date registerDate) {   
  38.         this.registerDate = registerDate;   
  39.     }   
  40.     public int getPoints() {   
  41.         return points;   
  42.     }   
  43.     public void setPoints(int points) {   
  44.         this.points = points;   
  45.     }   
  46.     public void setState(boolean state) {   
  47.         this.state = state;   
  48.     }   
  49.     public boolean getState(){   
  50.         return this.state;   
  51.     }   
  52.     public void setRole(boolean role) {   
  53.         this.role = role;   
  54.     }   
  55.     public boolean getRole(){   
  56.         return this.role;   
  57.     }   
  58. }  
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代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping package="org.brucefeng.sinter.domain">  
  6.   <class name="User" table="sinter_user">  
  7.     <id name="userPK" column="userpk" unsaved-value="null">  
  8.         <generator class="uuid.hex"></generator>  
  9.     </id>  
  10.     <property name="userID" type="string" column="userid" unique="true"></property>  
  11.     <property name="password" type="string" column="password"></property>  
  12.     <property name="nickname" type="string" column="name"></property>  
  13.     <property name="state" type="boolean" column="state"></property>  
  14.     <property name="role" type="boolean" column="role"></property>  
  15.     <property name="points" type="integer" column="points"></property>  
  16.     <property name="registerDate" type="timestamp" column="registerdate"></property>  
  17.   </class>  
  18. </hibernate-mapping>  
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.brucefeng.sinter.domain">
  <class name="User" table="sinter_user">
  	<id name="userPK" column="userpk" unsaved-value="null">
  		<generator class="uuid.hex"></generator>
  	</id>
  	<property name="userID" type="string" column="userid" unique="true"></property>
  	<property name="password" type="string" column="password"></property>
  	<property name="nickname" type="string" column="name"></property>
  	<property name="state" type="boolean" column="state"></property>
  	<property name="role" type="boolean" column="role"></property>
  	<property name="points" type="integer" column="points"></property>
  	<property name="registerDate" type="timestamp" column="registerdate"></property>
  </class>
</hibernate-mapping>

 

Java代码
  1. User testUser = new User();   
  2.   
  3. testUser.setRegisterDate(new Date);   
  4.   
  5. session.save(testUser);  
User testUser = new User();

testUser.setRegisterDate(new Date);

session.save(testUser);

 存储结束之后,由数据库中重新查询出此对象:

Java代码
  1. User savedUser = session.load(User.class,id);  
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代码
  1. public void setRegisterDate(Date registerDate) {   
  2.         this.registerDate = new Date(registerDate.getTime());   
  3.     }  
public void setRegisterDate(Date registerDate) {
		this.registerDate = new Date(registerDate.getTime());
	}

 这样即可顺利转变类型及值了。但是Hibernate中并没有对java.util.Date类型进行很好的映射,个人也觉得可以不采用Date类型记录时间,可适当考虑Calendar类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值