如何使用 JOINED 继承策略和 Hibernate 创建现有超级对象的子对象

2024-04-10

如何使用 Hibernate 创建持久化超级对象的子对象的正确方法是什么?

考虑以下示例: 在数据库中被持久化UserID 为 1,名字为 Kevin,激光名字为 Smith。到时候新Entity的数据库模型扩展了Auditor这是哪个子类User。对于继承使用策略JOINED,sso数据库模型现在有两个表:user and auditor。这些表使用 user_id FK 连接。

我想创建 Kevin Smith 对象类型 Auditor 并保留。问题是操作是事务性的并且 Hibernate 会抛出异常NonUniqueObjectException。存在如何安全地将持久对象强制转换为子对象的方法吗?我尝试驱逐给定的 User 对象,但仍然相同。

用户实体

@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User{

    private Long id;
    private String firstName;
    private String lastName;

    // getters and setters
}

审计单位

@Entity
@Table(name = "auditor")
public class Auditor extends User {
  // some properties
}

Logic

public void createAuditorOfUser(final long userId) {
  final User user = userService.getUserById(userId);
  // ...
  final Auditor auditor = new Auditor();
  auditor.setId(user.getId());
  auditor.setFirstName(user.getFirstName());
  auditor.setLastName(user.getLastName());
  userService.evict(user);
  // will throw  NonUniqueObjectException
  auditorService.update(auditor);
  // ...
}

我希望问题很清楚,如果没有,我会尝试改进描述。


我认为 Hibernate 有意限制这种行为。当然,您可以使用本机 SQL 解决方法来完成此操作(就像您已经做的那样)。

在Java中,我们也不能将超类的对象转换为子类,然后填充同一对象的新字段。相反,创建子类的新实例,然后复制字段。

似乎一对一关系映射更适合您所需的功能。

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

如何使用 JOINED 继承策略和 Hibernate 创建现有超级对象的子对象 的相关文章

随机推荐

  • 对(可能的)Android 内存泄漏一无所知

    我一直面临着一些烦人的事情OutOfMemoryErrors 即使在确保我的所有位图都正确缩放等之后 事实上 这个问题似乎与位图根本无关 但我可能是错的 出于测试和错误隔离的目的 我一直使用导航抽屉 不使用后退按钮 在两个活动 让我们称之为
  • 如何在 React 中将 select 元素与 prop 双向绑定

    在反应中创建选择元素的批准方法是什么 它与包含组件的选择的道具有两种方式绑定 默认选择应该是 prop 的当前属性 可以生成 因为该值是任意的 并且在选择时 prop 属性应该反映选择 此外 应该可以将值直接写入选择字段 我将选项添加到状态
  • 如何检测正在运行的 MSI 安装 [重复]

    这个问题在这里已经有答案了 我正在寻找一种方法来检测 Windows Installer 安装是否已在进行中 到目前为止我发现的是 检查注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows C
  • 通配符证书对 mydomain.com 无效

    我创建了通配符证书来支持我的网站域和子域 新证书适用于我的子域 例如 www mydomain com sub mydomain com 但是当我尝试访问 mydomain com 时 我收到证书警告 该证书仅对 mydomain com
  • 葡萄酒规格文件

    我有一个名为的 Windows DLLmorag dll包含函数 foo 和 bar 我还有一个名为的 Linux SOmorag so包含 foo 和 bar 的 Linux 实现 每个平台上的参数相同 我有一个可以加载的 Windows
  • 来自子进程的大数据块的 pexpect 超时

    我正在使用 pexpect 调用另一个提示输入 raw input 的 python 脚本 py27 我试图围绕这个脚本构建一个 GUI 包装器而不修改它 我遇到的问题是 我调用的脚本在下一个命令提示符之前执行时返回了大量数据 例如 10K
  • 如何在集成测试中使用 Propagation.REQUIRES_NEW 回滚嵌套事务

    我对扩展以下基类的各种服务进行了几个集成测试 ContextConfiguration locations classpath applicationContext test xml TransactionConfiguration tra
  • 在 Firebase 中对数据进行排序

    我正在使用 Firebase listview 如下所示 它的工作方式就像一个魅力 但问题是它在我的 listview lv 末尾显示子项 Posts 中最后按下的键 我希望最后按下的键最重要的是显示 或者我是否可以按日期对其进行排序 qu
  • MS Access SQL,更改数据类型

    当尝试在 Access 的设计模式下将数据类型从文本更改为数字 使用接近 2 GB 的数据库 时 我不断收到 磁盘空间或内存不足 错误 因此我找到了一种解决方法 基本上创建一个新列 将数据类型设置为数字 复制旧列内容 删除旧列并将新列重命名
  • 给定源顶点,查找有向图中具有环路的所有路径

    我无法解决这个问题 我必须找到所有simple从源顶点开始的路径s含有一个simple有向图中的循环 即不允许重复 当然除了循环在路径上连接回的单个重复顶点 我知道如何使用 DFS 访问来查找图形是否有循环 但我找不到一种方法来使用它来查找
  • 如何正确地将React组件存储在单独的文件中并导入React?

    我已经完成了一些 React 教程的介绍 并尝试将迄今为止的一些知识运用起来 我已经成功地在 a 中创建了一些组件
  • 如何获取UISlider拇指图像的中心

    我正在创建一个自定义UISlider测试一些界面创意 主要是基于使拇指图像更大 我找到了如何做到这一点like so UIImage thumb UIImage imageNamed newThumbImage 64px png self
  • 如何在使用邻接矩阵表示的大型网络中找到桥梁(社区连接节点)

    我有大约 10K 到 100K 个节点的网络 这些节点都已连接 这些节点通常被分组为社区集群 这些社区集群之间通过许多边紧密相连 并且存在集线器等 在社区之间存在具有一些边的节点bridging 连接社区在一起 这些数据集位于邻接矩阵中 我
  • htaccess 全部重写为index.html

    我正在尝试写 htaccess文件 以便无论用户请求什么 他都会获得该页面index html 我写过这个 Options FollowSymlinks RewriteEngine on RewriteRule index html NC
  • APC 命中/未命中和配置

    APC 操作码缓存中的 命中和未命中 是什么 我已经安装了 APC 并且运行得很好 但是我有 一些 失误 我想知道这是否是 坏 的 另外 我正在运行 Openx 因此 很快就会填满 缓存完整计数 我需要在配置中更改哪些内容才能最大限度地减少
  • 打印大型 TCL 项目的源层次结构

    因此 我正在处理一个大型 TCL 项目 并且认为构建一个树状视图来显示文件在项目中的来源方式会很酷 我修改了源命令以执行以下操作 rename source real source proc source args set file han
  • JavaFx 12 Spring,Maven 未找到前缀插件

    我在尝试使用 javafx 和 spring 调试项目时遇到问题 我的pom XML
  • UISplitViewController:如何强制在应用程序启动时显示主弹出框? (肖像)

    在 iPad 应用程序中 我使用 UISplitViewController 当应用程序以纵向模式启动时 我需要强制显示主弹出窗口 现在我正在使用这段代码 它在 iOS 5 0 上运行良好 if UIInterfaceOrientation
  • UWP 从任务更新 UI

    我有一个应用程序 它正在检查本地网络中的网络范围 用于运行http服务 所以这意味着我正在检查 f e 从 10 0 0 1 到 10 0 0 255 问题来了 在PC上运行时 速度足够 但在Lumia 950上运行时 速度不够 所以我想在
  • 如何使用 JOINED 继承策略和 Hibernate 创建现有超级对象的子对象

    如何使用 Hibernate 创建持久化超级对象的子对象的正确方法是什么 考虑以下示例 在数据库中被持久化UserID 为 1 名字为 Kevin 激光名字为 Smith 到时候新Entity的数据库模型扩展了Auditor这是哪个子类Us