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似乎忽略了我的更改。