【发布时间】:2012-11-28 00:53:53
【问题描述】:
我有一个 Spring / Hibernate 项目,我正在尝试将日期存储到数据库中,但它不起作用。这一定是愚蠢的,但我不知道我做错了什么。
这是我的代码:
user.setFailedPasswordAnswerAttemptCount(0);
user.setLastLoginDate(new Date());
user.setIsOnline(true);
其他两个变量(failedPasswordAnswerAttemptCount 和 isOnline)正在写入数据库而没有问题。我也试过只传递一个 java.util.Date 而不是 java.sql.Timestamp ......结果相同。以下是在用户对象上定义属性的方式:
private Date lastLoginDate;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="last_login_date")
public Date getLastLoginDate() {
return this.lastLoginDate;
}
public void setLastLoginDate(Date lastLoginDate) {
this.lastLoginDate = lastLoginDate;
}
这是列定义:
`last_login_date` datetime DEFAULT NULL
有什么帮助吗?我什至不知道还要寻找什么,因为这应该可以工作。
有关错误的更多详细信息:休眠日志中没有错误或奇怪的消息。休眠日志显示了一个参数化查询,但它并没有告诉我它实际上在写什么。看起来它根本没有更新该列。换句话说,如果那里已经有一个日期,它就不会改变,或者如果它为空,它就不会改变。
更新:我查看了日志,看起来 hibernate 确实写入了正确的数据,但随后立即再次写入了不正确的数据。我在日志中看到以下条目:
11:15:12.280 [http-bio-8080-exec-26] TRACE o.h.e.def.AbstractSaveEventListener - detached instance of: com.hi.model.User
11:15:12.280 [http-bio-8080-exec-26] TRACE o.h.e.def.DefaultMergeEventListener - merging detached instance
在那之后,我看到它把旧值放回了 lastLoginDate。
【问题讨论】:
-
什么是失败?只是写
NULL吗?它会产生错误消息吗?是不是在日志里写了些奇怪的东西? -
@DonalFellows 我在帖子末尾添加了更多细节。
-
映射问题?您是否尝试将注解 @column 放到字段而不是函数中?
-
@JulienMay 我试过了,没用。
-
我在我的应用程序中几乎就是这样做的。我认为 @Column 注释中的长度定义看起来很可疑。尝试删除它,然后使用 user.setLastLoginDate(new Date()); - 为我工作。此外,如果您为 org.hibernate 设置 TRACE 日志记录,它会显示它用于插入的参数值。
标签: mysql sql spring hibernate