【发布时间】:2014-05-30 00:30:56
【问题描述】:
我正在尝试学习 Spring Data,并且正在使用 JpaRepository 尝试从数据库中查询日期对象。但是,每次我查询日期时,结果总是比我的预期值提前两天。时间部分似乎是正确的;只是日期错误。问题是,只有当我在我的机器上编译代码时才会发生这种情况。在另一个人身上这样做会产生正确的结果。有什么我需要看的吗?任何帮助将不胜感激。
数据库值:2014-05-29 19:47:00.576
下面的 testRepo() 改为返回 2014-05-27 19:47:00.576。
public void testRepo() {
System.out.println(repo.findByName("TESTDATE").getValue());
}
===========
@Autowired
private EntityManager em;
public DateObject findByName(String name) {
StringBuffer sql = new StringBuffer();
sql.append("select * ");
sql.append("from static_dates ");
sql.append("where name = '" + name + "'");
Query q = em.createNativeQuery(sql.toString(), DateObject.class);
List<DateObject> resultList = q.getResultList();
System.out.println(resultList.get(0).getValue());
return resultList.get(0);
}
=========
@Entity
@Table(name = "static_dates")
public class DateObject {
@Id
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
@Column(name = "value")
private Date value;
public Date getValue() {
return value;
}
public void setValue(Date value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
此外,保存日期值会产生正确的结果。例如,如果我调用 repo.save( ... ) 并传递当前系统日期,则相同的值会反映在数据库中。只有 SELECT 调用似乎不正确。
【问题讨论】:
-
看来你的代码没什么问题,说了这么多,请问你的代码连接的是同一个数据库吗?
-
是的。更新数据库中的值也会更改测试方法的结果(同样,结果比预期日期提前两天)。我知道我正在做的唯一区别是添加 MSSQL 的 sendTimeAsDatetime=false 连接属性,但我非常怀疑这是问题的原因。
标签: java sql-server spring-data-jpa