我使用Spring Boot和Spring Data JPA,想要更新JPA更新语句中的LastUpdatedDate
和LastModifiedBy
字段。假设雇员是我的实体类,它扩展了AbstractBaseEntity类。
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Data
public abstract class AbstractBaseEntity {
@CreatedBy
@JsonIgnore
@Column(name = "CRTE_USER_ID")
protected String createdByUser = "TEST_USER";
@CreatedDate
@JsonIgnore
@Column(name = "CRTE_DT", updatable = false)
protected Date createdDate = new Date();
@LastModifiedBy
@JsonIgnore
@Column(name = "UPDT_USER_ID")
protected String lastUpdatedByUser = "TEST_USER";
@LastModifiedDate
@JsonIgnore
@Column(name = "UPDT_DT")
protected Date lastUpdatedOn = new Date();
@Version
@JsonIgnore
@Column(name = "VER_NUM")
protected Integer versionNumber = 1;
}
另一门课
public class Employee extends AbstractBaseEntity{
...
...
...
}
下面的查询不更新任何日期。我们该怎么解决呢?
@Modifying(clearAutomatically = true)
@Transactional
@Query("UPDATE Employee p SET p.status =:status, p.lastUpdatedOn = :lastUpdatedOn WHERE p.srcProjectKeyId = (:id)")
int updatestatus(@Param("status") String status, @Param("id") Long id, @Param("lastUpdatedOn") Date lastUpdatedOn);
为了使审计工作在所有,请确保@EnableJpaAudting
注释添加到@Configuration
类。
在@PrePersist
和@PreUpdate
阶段调用AuditingEntityListener
方法。只有直接操纵实体时,AFAIK才有效。如果使用@Query
语句,它就不起作用。
Update语句必须手动执行,例如:
UPDATE Employee p SET p.status =:status, p.lastUpdatedOn =
:lastUpdatedOn, p.lastUpdatedBy = :lastUpdatedBy WHERE
p.srcProjectKeyId = (:id)
要获取当前日期,请使用:
Date now = new Date();
// or
long now = System.currentTimeMillis();
要获取当前用户(也称为委托人),请使用:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
以下是关于缓存失效问题的较长讨论:
Spring Boot Data JPA-修改更新查询-刷新持久性上下文
Spring Data JPA Update@查询未更新?
手动更新数据库后清除Hibernate二级缓存
我的项目中的三个模型对象(本文末尾的模型和存储库片段)之间确实存在关系。 当我调用时,它会触发三个select查询: (“sql”) (对我来说)那是相当不寻常的行为。在阅读Hibernate文档后,我认为它应该始终使用连接查询。当类中的更改为时,查询没有区别(使用附加选择进行查询),当更改为时,城市类的查询也一样(使用JOIN进行查询)。 当我使用抑制火灾时,有两种选择: 我的目标是在所有情况下
我有一个Calendarview和一个EditText。我希望以DD/MM/YYYY格式在edittext中输入的日期,并将其设置在CalendarView上。视图应将当前日期气泡更新为设置的日期。 提前道谢!
我有以下代码: 在日志中,我只能看到来自BClass而不是AClass的字段: 17:52:28.151[main]INFO Main-Main. BClass(金额=12) 但是我想查看所有BClass字段,包括父类中的字段(标题字段)。我该怎么做?
我正在使用MySql工作台执行查询。 但它没有更新行,并显示以下错误: 您正在使用安全更新模式,并且试图更新一个没有使用键列禁用安全模式的WHERE的表,请在Preferences->SQL Editor中切换该选项并重新连接。
当更新旧日期到新日期时,我得到 SQL错误:ORA-00932:不一致的数据类型:预期日期获取字符00932。00000-“不一致的数据类型:预期%s得到%s”
问题内容: 这比看起来难。我需要一个函数来计算日期范围内给定工作日的数量。我不需要任何循环或递归SQL。数以百万计的示例就是这样做的。我需要一个快速函数来进行计算。 该函数的输入将是工作日,fromdata,迄今为止 预期结果: 问题答案: @Mikael Eriksson有一个绝妙的主意,但是他的实现似乎有些复杂。 这是我想出的(我想强调一下, 它基于 @Mikael 的 解决方案 ,主要功劳应