在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类型映射时,具体代码如下:
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 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>
User testUser = new User();
testUser.setRegisterDate(new Date);
session.save(testUser);
存储结束之后,由数据库中重新查询出此对象:
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类型并不能进行相等比较的。当然在程序中比较两个时间点的相等性是不切合实际的,但如果一些特殊应用需要比较的话,可以使用其他方法解决。例如:
public void setRegisterDate(Date registerDate) {
this.registerDate = new Date(registerDate.getTime());
}
这样即可顺利转变类型及值了。但是Hibernate中并没有对java.util.Date类型进行很好的映射,个人也觉得可以不采用Date类型记录时间,可适当考虑Calendar类型。
分享到:
相关推荐
java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx
详细介绍java.util.Date和java.sql.Date相互转换的多种方法总结,希望对大家有帮助
Java的java.util.Date类是Java初的时间类之一。该类的大部分方法已不推荐使用,取而代之的是java.util.Calendar类。不过你仍然可以使用java.util.Date类去表示某个时间。下面是一个如何实例化java.util.Date的例子:...
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
java.util.Date到Json日期的转换
java.util.ConcurrentModificationException 异常问题详解1
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
Exception in thread “main“ java.util.InputMismatchException
java_sql_Date与java_util_Date转换
类型转换 ( Java.util.date与java.sql.date区别和转换
java.sql.date与java.util.date.pdf
这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
此java文件包括常用的日期类型之间的转换,包括java.util.Date、java.sql.Date、String之间的任意类型、格式转换......