@CreatedBy 和 @LastModifiedBy 设置实际实体而不是 id

2024-03-02

我有一个看起来像这样的实体:

@Audited
@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

  public static final long UNSAVED = 0;

  @Id
  @GeneratedValue
  private long id;

  @CreatedDate
  @Column(name = "created_at", updatable = false)
  private ZonedDateTime createdAt;

  @CreatedBy
  @OneToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "created_by")
  private User createdBy;

  @LastModifiedDate
  private ZonedDateTime updatedAt;

  @OneToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "updated_by")
  @LastModifiedBy
  private User updatedBy;

}

我想要 @LastModifiedBy 和 @CreatedBy 以便它们设置相应的用户。但是,当我尝试保存实体时,出现异常:

java.lang.ClassCastException: Cannot cast java.lang.Long to com.intranet.users.Users

所以在我看来,它试图设置的不是实际的用户,而是 id。有没有什么方法可以让 spring 在实体上设置实际用户而不仅仅是它的 id ?

Thanks


这似乎很直接地回答了文档 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#auditing.auditor-aware:

如果您使用@CreatedBy或@LastModifiedBy,审核 基础设施需要以某种方式了解当前的主体。 为此,我们提供了一个 AuditorAware SPI 接口,您必须 实现告诉基础设施当前用户或系统是谁 与应用程序交互是。泛型类型 T 定义了什么 键入用 @CreatedBy 或 @LastModifiedBy 注释的属性 成为。

以下示例显示了该接口的实现 使用 Spring Security 的 Authentication 对象:

示例 104. 基于 Spring Security 的 AuditorAware 实现

class SpringSecurityAuditorAware implements AuditorAware<User> {

  public Optional<User> getCurrentAuditor() {

    return Optional.ofNullable(SecurityContextHolder.getContext())
        .map(SecurityContext::getAuthentication)
        .filter(Authentication::isAuthenticated)
        .map(Authentication::getPrincipal)
        .map(User.class::cast);   
  } 
} 

该实现访问 Spring Security 提供的 Authentication 对象并查找 您在中创建的自定义 UserDetails 实例 UserDetailsS​​ervice 实现。我们在这里假设您是 通过 UserDetails 实现公开域用户,但是 根据找到的身份验证,您还可以查找它 来自任何地方。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@CreatedBy 和 @LastModifiedBy 设置实际实体而不是 id 的相关文章

随机推荐

  • 将 Numpy 矩阵显示为视频

    我有一个 numpy 矩阵 其中每一行都是一张图片 我可以重塑行并使用 matplotlib pyplot 显示图像 问题是 我不想单独显示图像 我想像视频一样依次显示它们 这在Python中怎么可能呢 好吧 我不知道这是否是最好的方法 但
  • 包含(大多数)所有元素的 HTML 页面,用于样式设置

    是否有人拥有或知道包含所有元素 带有口语文本或其他内容 的 HTML 页面 我可以做一个 但我想一定有人已经这样做了 当开始一个项目时 我喜欢为链接 列表 表格等设置一些基本样式 包含所有元素的 HTML 页面将帮助我加快此过程 我很乐意创
  • 如何在 iOS 6 中启动具有特定地址的 iOS 地图应用程序?

    我有一个应用程序 允许用户启动地图应用程序 Google 或 Apple 来查看地址 我曾经这样做过 Address address self person addresses objectAtIndex 0 NSString addres
  • 访问页面时自动点击页面上的锚链接

    我之前问过这个问题 但一些专家告诉我补充一下 这可以重新加载给定的链接 但我想知道如何在 id 的帮助下单击元素 锚点 是否有任何代码在执行时会单击 id dp99 并且我希望在访问页面时执行此 javascript 这是 HTML a h
  • Cordova、iOS 和 iframe 不会加载内容,除非我允许访问 href="*"

    我有一个网络应用程序 它有一个嵌入式地图字段 它是使用 iframe 实现的https maps google com https maps google com 我正在将我们的应用程序 当前作为主屏幕图标运行 移植到 iOS 上的 Cor
  • 在 C++ 中将数据从一个线程发送到另一个线程的最快方法是什么?

    我尝试过构建一个简单的生产者 消费者程序的实验 它们在单独的线程中运行 生产者生成一些数据 消费者在另一个线程中获取它 我实现的消息传递延迟约为 100 纳秒 谁能告诉我这是否合理或者是否有更快的实现 我没有使用锁 只是简单的内存计数器 我
  • OpenGL 中的动画 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想请您分享一些关于如何在 OpenGL 应用程序中实现动画支持的想法 例如 如果我们希望在用户输入触发某些事件的情况下 在屏幕上为球
  • 增加 Kafka 消费者在单次轮询中读取的消息数量

    Kafka消费者有一个配置max poll records它控制单次调用 poll 及其返回的最大记录数默认值为 500 https kafka apache org documentation max poll records 我已将其设
  • 如何判断一个点(X,Y)是否包含在圆的弧段内(即饼图切片)?

    想象一个圆圈 想象一下一个馅饼 想象一下 尝试返回一个布尔值 该布尔值确定所提供的 X Y 参数是否包含在这些饼图块之一中 我对弧线的了解 我有 CenterX CenterY 半径 StartingAngle EndingAngle St
  • 如何加快 AWS 设备场上的 Selenium 测试速度?

    我正在使用 Python 在 AWS 设备场上进行测试 看来开始使用硒需要非常非常长的时间 这是我使用的代码 from time import time from boto3 import client from selenium impo
  • 增加 sas 内存/memsize

    您好 有一个包含大约 6000 个观测值和 250 个变量的数据集 我正在尝试使用 proc mix 在 sas 中运行混合模型 但我不断收到 错误 由于内存不足 sas 系统停止处理此步骤 我尝试了康奈尔大学的方法 http www ci
  • 为什么@RequestBody得到一个带有null属性的对象

    我有一个 springboot REST 控制器 其中包含所示的 PATCH 和 PUT 请求方法 由于某种原因 RequestBody 公司 的字段 属性作为空值出现 我缺少什么 我在前端使用 angular8 它正在执行 PATCH 调
  • 在移动网站上禁用 JavaScript

    我的网站上有一个聊天小部件 它占据了手机的整个屏幕 如何在一定宽度的设备 或手机 上禁用聊天设备
  • “可视化页面编辑器对 Windows 64 位提供实验性支持”

    我正在使用 Eclipse Luna 和 JBoss AS 7 当我在 Eclipse 中创建 JSP 页面时 出现以下错误 我将服务器更改为 Tomcat 7 但仍然遇到相同的错误 这是如何引起的以及如何解决 该可视化页面编辑器是JBos
  • 扩展 Javascript Promise 并在构造函数内解析或拒绝它

    我想用 ES6 语法扩展原生 Javascript Promise 类 并且能够在子类构造函数中调用一些异步函数 根据异步函数结果 承诺必须被拒绝或解决 然而 当then函数被称为 子类构造函数执行两次 抛出 未捕获的类型错误 Promis
  • Oracle 中删除和删除清除之间的区别

    我正在使用 Oracle 数据库 但我对删除和清除命令有点困惑 事实上对我来说两者都做同样的事情 从数据库中删除具有架构的表 这两者之间的主要区别是什么 删除表表名 删除表表名清除 通常 如果表被删除 则会将其移至回收站 从 Oracle
  • ScalaTest 可以为所有子项目生成一个 HTML 报告吗?

    我正在尝试使用 ScalaTest 使用 Scala 2 11 0 和 SBT 0 13 x 为具有许多子项目的项目生成单个 HTML 报告 为此 我将以下行放入 build sbt 中 testOptions in ThisBuild T
  • Jetty 11 未检测到 Jakarta Servlet

    这是后续this https stackoverflow com questions 66361859 jetty 11 doesnt detect servlets问题 我不认为这是重复的 因为接受的答案表明 Jetty 11 不能与ja
  • pandas dataframe 在整行中搜索字符串

    我有一个如下所示的熊猫数据框 我想在数据帧的每一行中搜索文本 并突出显示该文本是否出现在该行中 例如 我想在每一行中搜索 jones 我想忽略搜索词的大小写 在下面的情况下 我想向名为 jones 的数据添加一个新列 它的值将是 1 1 0
  • @CreatedBy 和 @LastModifiedBy 设置实际实体而不是 id

    我有一个看起来像这样的实体 Audited Data MappedSuperclass EntityListeners AuditingEntityListener class public abstract class BaseEntit