Java 正在更新可更新的false列

Java 正在更新可更新的false列,java,hibernate,Java,Hibernate,我的表中有一个createdAt列,我不想在第一次创建后更新该列。因此,我在其定义中将其标记为updateable=false。然而,当我使用hibernate的更新方法时,它正在得到更新。当我检查hibernate更新查询日志时,我看到更新查询中不包括createdAt字段,但它仍然得到更新。下面是我正在使用的代码(我使用Hibernate4) --编辑-- 我使用mysql作为数据库,显然mysql workbench在更新当前时间戳时默认将CURRENT\u TIMESTAMP属性添加到T

我的表中有一个
createdAt
列,我不想在第一次创建后更新该列。因此,我在其定义中将其标记为
updateable=false
。然而,当我使用hibernate的更新方法时,它正在得到更新。当我检查hibernate更新查询日志时,我看到更新查询中不包括createdAt字段,但它仍然得到更新。下面是我正在使用的代码(我使用Hibernate4)

--编辑-- 我使用mysql作为数据库,显然mysql workbench在更新当前时间戳时默认将
CURRENT\u TIMESTAMP
属性添加到TIMESTAMP列。删除更新时的
后,当前的\u时间戳
hibernate更新问题得到解决

下面是列定义

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createdAt", nullable = false, length = 19, updatable = false)
public Date getCreatedAt() {
    return createdAt;
}
以下是更新方法:

Session session = null;
try {
    session = currentSession();
    session.beginTransaction();
    session.update(user);
    commitTransactionOfGivenSession(session);
} catch (HibernateException exc) {
    logRollbackAndThrowHibernateException(exc, session);
} finally {
    closeSession(session);
}
休眠日志,不包括
createdAt
字段

update
    example_schema.Users 
set
    lastLogin=?,
    lastNotifiedAt=?,
    userName=?,
    waitingSince=? 
where
    userId=?

这应该是一个常见的问题,在这个问题中,您注释了属性,而不是字段,或者相反。如果您的类没有附加注释,您应该保持一致,只注释getter(属性)或字段(类变量)。

我使用mysql作为数据库,显然mysql workbench在默认情况下将更新当前时间戳时添加当前时间戳。删除更新当前时间戳属性上的
后,问题得到解决。

您必须从列中删除更新当前时间戳属性上的

ALTER TABLE `DATABASE_NAME`.`TABLE_NAME` CHANGE `create_at` `create_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

什么数据库管理系统,以及如何在数据库上定义列?表上是否有导致列更新的触发器?我使用的是mysql,字段定义为时间戳。现在我看到有一个默认值是由mysql自动生成的“更新当前时间戳时的当前时间戳”。我试图删除这个,但mysql似乎忽略了我的更改。