【发布时间】:2016-07-25 02:37:27
【问题描述】:
我在该实体中有一个实体我有 2 个属性:
dateStart - 应该只包含 yyyy-MM-dd
timeStart - 应该只包含时间 HH:mm
我正在使用 postgreSQL 数据库。我的表是这样定义的:
CREATE TABLE xxx
(
dateStart date,
timeStart time without time zone
)
我在 java 中使用 hibernate 映射了这个表(日期是 java.util.Date 的类型,如果可能的话,我想坚持使用它):
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date dateStart;
@Temporal(TemporalType.TIME)
@DateTimeFormat(pattern = "HH:mm")
private Date dateTime;
我也在使用弹簧。我有一个表单,用户可以在其中填写实际创建此实体的输入
<form:form method="post" class="form-horizontal" action="..." commandName="xxx">
<form:input path="dateStart" type="date"/>
<form:input path="timeStart" type="time"/>
.....
<submit button>
</form:form>
这是我实际创建实体的控制器(当用户提交表单时)
@RequestMapping(value = "/viewSpecificTests", method = RequestMethod.POST)
public String viewSpecificTests(Model model, @Valid XXX xxx, BindingResult result) {
if (result.hasErrors()) {
return "createSpecificTest";
}
xxxService.createTable(xxx);
return "viewSpecificTests";
}
但是,当我打印我的实体 xxx.toString() 时。我的日期和时间没有正确存储。
dateStart 如下所示:Tue Apr 05 00:00:00 CEST 2016
日期时间如下所示:Thu Jan 01 12:30:00 CET 1970
如何告诉 hibernate 只保留日期/只保留时间?由于某种原因,我被这个问题困扰了很长时间,@Temporal 并没有按照我想要的方式为我工作。
【问题讨论】:
-
您是否检查了数据库中日期字段的存储方式?数据库中存储的值与日期对象的对象表示存在差异。
-
是的,你完全正确。现在一切都说得通了。谢谢
标签: java spring hibernate postgresql