我在我的一个Spring引导应用程序中使用了以下Hibernate实体。
@Entity
@Table(name = "Student")
public class Student extends AbstractAuditingEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private String id;
@Column(name = "name")
private String name;
@Column(name = "description")
private String description;
...
}
AbstractAuditingEntity
的计算公式如下:
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AbstractAuditingEntity implements Serializable {
private static final long serialVersionUID = 1L;
@CreatedBy
@Column(name = "created_by", nullable = false, length = 50, updatable = false)
@JsonIgnore
private String createdBy;
@CreatedDate
@Column(name = "created_date", updatable = false)
@JsonIgnore
private Instant createdDate = Instant.now();
@LastModifiedBy
@Column(name = "last_modified_by", length = 50)
@JsonIgnore
private String lastModifiedBy;
@LastModifiedDate
@Column(name = "last_modified_date")
@JsonIgnore
private Instant lastModifiedDate = Instant.now();
...
}
在所有现有流中,lastModifiedBy
和lastModifiedDate
均正确填充。
现在,在一个新的流程中,我正在从另一个系统同步上述实体,并且我希望显式更新lastModifiedDate
和lastModifiedBy
的值。我已经尝试了下面的更新查询来更新这两个字段,但它不起作用。
@Modifying(flushAutomatically = true)
@Query("update Student u set " +
"u.lastModifiedBy = :lastModifiedBy, " +
"u.lastModifiedDate = :lastModifiedDate " +
"where u.id = :id")
void updateLastModifiedInformation(@Param("lastModifiedBy") String lastModifiedBy,
@Param("lastModifiedDate") Instant lastModifiedDate,
@Param("id") String id);
即使在更新之后,我也看到lastModifiedDate
和lastModifiedBy
列分别填充了当前日期和当前登录用户,这是我不希望看到的。
我没有得到任何线索,如何使这工作。
- 编辑**:
在评论中给出建议后,我尝试了原生查询,如下所示,但还是一样:
@Modifying
@Query(value = "update Student u set " +
"u.last_modified_by = :lastModifiedBy, " +
"u.last_modified_date = :lastModifiedDate " +
"where u.id = :id", nativeQuery = true)
void updateLastModifiedInformation(@Param("lastModifiedBy") String lastModifiedBy,
@Param("lastModifiedDate") Instant lastModifiedDate,
@Param("id") String id);
有人能帮帮忙吗?谢谢。
1条答案
按热度按时间5tmbdcev1#
我试着重复你的问题,这里有一个可能的解决方案。
首先在
AbstractAuditingEntity
中定义setLastModifiedDate
方法:通过调用
student.setLastModifiedDate(date)
,您将能够设置您选择的最后修改日期并保存到StudentRepo
,我在StudentServ
中使用以下方法测试了它:lastModifiedDate
将更新为您输入的instant
。lastModifiedBy
字段应采用类似方式处理。希望能有所帮助。
编辑:
对于修改后的查询,以下内容应该与您想要实现的内容更加相似: