情况:
我有一个带有 java.util.Date 类型变量的持久类:
import java.util.Date;
@Entity
@Table(name = "prd_period")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Period extends ManagedEntity implements Interval {
@Column(name = "startdate_", nullable = false)
private Date startDate;
}
DB中对应的表:
CREATE TABLE 'prd_period' (
'id_' bigint(20) NOT NULL AUTO_INCREMENT,
...
'startdate_' datetime NOT NULL
)
然后我将 period 对象保存到数据库:
Period p = new Period();
Date d = new Date();
p.setStartDate();
myDao.save(p);
之后,如果我尝试从数据库中提取我的对象,它将以时间戳类型的变量 startDate 返回 - 并且我尝试使用 equals(...) 的所有地方都返回 false。
Question:是否有任何方法可以强制 Hibernate 将日期作为 java.util.Date 类型的对象而不是 Timestamp 返回,而无需显式修改每个此类变量(例如,它必须能够正常工作,而无需显式修改 java.util.Date 的现有变量)。日期类型)?
NOTE:
我发现了许多显式解决方案,其中使用注释或修改设置器 - 但我有许多带有日期变量的类 - 所以我需要一些集中的解决方案,并且下面描述的所有内容都不够好:
-
使用注解@Type:- java.sql.Date 将被返回
@Column
@Type(type="date")
private Date startDate;
-
使用注释@Temporal(TemporalType.DATE)- java.sql.Date 将被返回
@Temporal(TemporalType.DATE)
@Column(name=”CREATION_DATE”)
private Date startDate;
-
通过修改setter(深拷贝)- java.util.Date 将被返回
public void setStartDate(Date startDate) {
if (startDate != null) {
this.startDate = new Date(startDate.getTime());
} else {
this.startDate = null;
}
}
通过创建我自己的类型:- java.util.Date 将被返回
详细信息如下:http://blogs.sourceallies.com/2012/02/hibernate-date-vs-timestamp/ http://blogs.sourceallies.com/2012/02/hibernate-date-vs-timestamp/
使用自定义 UserType 的一个简单替代方法是在持久 bean 中的日期属性的 setter 中构造一个新的 java.util.Date,例如:
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Column;
@Entity
public class Purchase {
private Date date;
@Column
public Date getDate() {
return this.date;
}
public void setDate(Date date) {
// force java.sql.Timestamp to be set as a java.util.Date
this.date = new Date(date.getTime());
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)