Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate@UpdateTimestamp注释用法_Java_Hibernate - Fatal编程技术网

Java Hibernate@UpdateTimestamp注释用法

Java Hibernate@UpdateTimestamp注释用法,java,hibernate,Java,Hibernate,我正在使用Hibernate core 5.4.22和Hibernate common annotations 5.1.2。我已尝试使用以下注释在DB条目上保存更新时间戳: @UpdateTimestamp 私有LocalDateTime closedDateTime; 不幸的是,这仅在数据库中创建新条目时有效,而在更新条目行时无效。根据hibernate: @UpdateTimestamp注释指示Hibernate在持久化实体时使用JVM的当前时间戳值设置带注释的实体属性 支持的属性类型包括

我正在使用Hibernate core 5.4.22和Hibernate common annotations 5.1.2。我已尝试使用以下注释在DB条目上保存更新时间戳:

@UpdateTimestamp
私有LocalDateTime closedDateTime;

不幸的是,这仅在数据库中创建新条目时有效,而在更新条目行时无效。

根据hibernate:

@UpdateTimestamp
注释指示Hibernate在持久化实体时使用JVM的当前时间戳值设置带注释的实体属性

支持的属性类型包括:

  • java.util.Date
  • java.util.Calendar
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
您使用直接更新查询,但是
@UpdateTimestamp
注释不适用于这种情况

假设您拥有
TestData
实体:

@实体
公共类测试数据
{
@身份证
私人长id;
私有字符串名称;
@UpdateTimestamp
私有LocalDateTime时间;
}
因此,您可以通过以下方式创建新实体:

TestData TestData=newtestdata();
testData.setId(1L);
testData.setName(“名称1”);
persist(testData);
或通过以下方式更新现有实体:

TestData TestData=entityManager.find(TestData.class,1L);
testData.setName(“名称11”);
testData=entityManager.merge(testData);
在最后一种情况下,hibernate将通过以下查询自动更新
时间
字段:

13:00:32468调试SQL:144-//更新com.test.hibernate.entities.TestData
更新TEST_SCHEMA.TST_TEST_数据
设置
名称=?,
时间=?
哪里
id=?

根据休眠状态:

@UpdateTimestamp
注释指示Hibernate在持久化实体时使用JVM的当前时间戳值设置带注释的实体属性

支持的属性类型包括:

  • java.util.Date
  • java.util.Calendar
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
您使用直接更新查询,但是
@UpdateTimestamp
注释不适用于这种情况

假设您拥有
TestData
实体:

@实体
公共类测试数据
{
@身份证
私人长id;
私有字符串名称;
@UpdateTimestamp
私有LocalDateTime时间;
}
因此,您可以通过以下方式创建新实体:

TestData TestData=newtestdata();
testData.setId(1L);
testData.setName(“名称1”);
persist(testData);
或通过以下方式更新现有实体:

TestData TestData=entityManager.find(TestData.class,1L);
testData.setName(“名称11”);
testData=entityManager.merge(testData);
在最后一种情况下,hibernate将通过以下查询自动更新
时间
字段:

13:00:32468调试SQL:144-//更新com.test.hibernate.entities.TestData
更新TEST_SCHEMA.TST_TEST_数据
设置
名称=?,
时间=?
哪里
id=?

好吧,我改成了java.sql.Timestamp;但是更新时间戳似乎只在插入DB时插入,而不是在更新语句中插入。我已经用hibernate core 5.4.22测试了时间戳更新,它工作正常(顺便说一句,它也适用于
LocalDateTime
java类型),所以问题似乎出在其他地方。你使用什么数据库?该列使用哪种数据库类型?您使用的是什么hibernate方言?您还可以提供如何更新实体的代码片段。方言:org.hibernate.dialoge.mysql8dialogue,列类型:datetime
String updateTicketStatus=“update Ticket T set T.Etat=:Etat WHERE Ticket\u id=:tickettid”;Query Query=session.createQuery(updateTicketStatus);query.setParameter(“etat”,ticket.getEtat());query.setParameter(“ticketId”,ticket.getTicket_id());query.executeUpdate();//提交事务transaction.commit()嗯,我已经改为java.sql.Timestamp;但是更新时间戳似乎只在插入DB时插入,而不是在更新语句中插入。我已经用hibernate core 5.4.22测试了时间戳更新,它工作正常(顺便说一句,它也适用于
LocalDateTime
java类型),所以问题似乎出在其他地方。你使用什么数据库?该列使用哪种数据库类型?您使用的是什么hibernate方言?您还可以提供如何更新实体的代码片段。方言:org.hibernate.dialoge.mysql8dialogue,列类型:datetime
String updateTicketStatus=“update Ticket T set T.Etat=:Etat WHERE Ticket\u id=:tickettid”;Query Query=session.createQuery(updateTicketStatus);query.setParameter(“etat”,ticket.getEtat());query.setParameter(“ticketId”,ticket.getTicket_id());query.executeUpdate();//提交事务transaction.commit()