开发学院软件开发Java hibernate中java.util.Date类型映射 阅读

hibernate中java.util.Date类型映射

 2009-12-21 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺鍦拡閸嬪棝鎯€椤忓浂妯勯梺鍝勬湰濞叉ḿ鎹㈠┑濠勭杸闁哄洨濮烽悰銉╂⒒娴e搫甯跺鐟帮攻缁傚秴饪伴崼姘e亾閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡涱€楀褜鍠栭湁闁绘ɑ鐟ョ€氼喚绮绘ィ鍐╃厱妞ゆ劑鍊曢弸搴ㄦ煟韫囧鍔滈柕鍥у瀵潙螣閸濆嫬袝婵$偑鍊戦崹娲偡閳哄懎绠栭柍鈺佸暞閸庣喖鏌曢崶褍绨婚柟鍑ゆ嫹
核心提示:在Hibernate中对于java.util.Date类型的映射为:java类型Hibernate类型Mysql类型java.util.Date、java.sql.DatedateDATEjava.util.Date、java.sql.TimetimeTIMEjava.util.Date、java.sql.Timest

在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代码 

<?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代码 

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

Tags:hibernate java util

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
更多精彩
    赞助商链接

    热点阅读
      焦点图片
        最新推荐
          精彩阅读