Hibernate如何使用常量作为复合外部引用的一部分

2023-11-30

我有一个带有复合主键的主表 A,包括two列。其中一列是constant(下面代码中的“常量值”)。该表定义如下所示:

@Entity public class Master {
  @Id
  @Column(name = "SIGNIFICANT_KEY")
  private String realKey;

  @Id
  @Column(name = "CONSTANT_KEY")
  private String constantPartKey;
}

我有一个详细表 B,仅使用引用主表 Aone(非常量)列。我想在两个表之间实现通常的 ManyToOne 和 OneToMany 关系。

Question:我如何使用 Hibernate 处理这种情况?

我找到的主参考的唯一解决方案依赖于使用formulas:

@Entity public class Detail {
  @ManyToOne
  @JoinColumnsOrFormulas(value={
    @JoinColumnOrFormula(column=
      @JoinColumn(name = "SIGNIFICANT_KEY",
                  referencedColumnName = "SIGNIFICANT_KEY",
                  insertable=false, updatable=false, nullable = false)),
    @JoinColumnOrFormula(formula=
      @JoinFormula(referencedColumnName="CONSTANT_KEY", value="'THE CONSTANT VALUE'"))
  })
  Master master;
}

现在我看到其他问题:由于我之前在这里报告的 java.lang.ClassCastException 问题,我无法在 OneToMany 关系中使用此字段:https://hibernate.onjira.com/browse/HHH-6811


我真的想知道在数据库中拥有恒定的列值有什么帮助,但无论如何......

我要做的就是仅将非常量列映射为 ID,并使常量列成为常规列,并具有常量值:

@Entity
public class Strange {
    @Id
    private Long id;

    @Column
    private long constant = 345; // the constant that you want in your database

    @OneToMany(mappedBy = "strange")
    private Set<Detail> details;

    ...
    // no setter for constant!
}

@Entity
public class Detail {
   ...
   @ManyToOne
   @JoinColumn(name = "strange_id")
   private Strange strange;
}

如果其他实体使用其完整组合键引用同一个奇怪实体,则只需执行以下操作:

@Entity
public class Strange {
    @Id
    @Column(name = "strange_id")
    private Long id;

    @Id
    private long constant = 345; // the constant that you want in your database

    @OneToMany(mappedBy = "strange")
    private Set<Detail> details;

    ...
    // no setter for constant!
}

@Entity
public class Detail {
   ...
   @ManyToOne
   @JoinColumn(name = "strange_id", referencedColumnName = "strange_id")
   private Strange strange;
}

您可以使用 PK 以外的其他内容来引用其他实体。另外一个独特的专栏也可以。而且由于 odd_id 是唯一的,因此它符合要求。这referencedColumnName在这种情况下,必须使用属性来指定引用的列名称。

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

Hibernate如何使用常量作为复合外部引用的一部分 的相关文章

随机推荐

  • C中的宏定义错误?

    define SOUND SPEED 0 034 int rtt round trip time in microsecond double distance distance double rtt SOUND SPEED 2 它抱怨错误
  • IE 忽略定位元素上的 Z-Index

    事实证明 IE 再次成为我生存的祸根 我正在开发的网站顶部有一个水平菜单 其中的一个项目会触发一个纯 CSS 菜单 该菜单绝对定位在父菜单 DIV 内 相对定位 这使得菜单可以完美地放置在 IE 和 W3C 兼容浏览器中 当我在页面下方有更
  • 在 C# 中使用 Windows 窗体隐藏/阻止选项卡

    问题是我有一个 登录窗口 和一个 主窗口 在按下登录按钮或 访客 按钮后调用 如果按登录按钮 整个系统都会出来 如果我按访客按钮 一个选项卡应该消失或被阻止或其他什么 private void visitant object sender
  • 按周/月//季度/年分区以突破分区限制?

    我有 32 年的数据想要放入分区表中 但是 BigQuery 说我超出了限制 4000 个分区 对于这样的查询 CREATE TABLE deleting day partition PARTITION BY FlightDate AS S
  • ClickOnce 和 .NET 5:用户设置未更新

    我已将我的一个 WPF 应用程序从 NET Framework 4 7 更新到 NET 5 它使用 ClickOnce 安装程序来安装更新 自从更改为 NET 5 以来 我使用 AssemblyVersion 来设置版本 而不是依赖 Cli
  • 如何命名一组类型边界? [复制]

    这个问题在这里已经有答案了 如果我有一长串必须在很多地方重复的类型界限 我该如何给它们命名 例如 如果不是 fn foo
  • 如何获取CSS类中元素的属性集

    我想读取元素的高度和宽度 div style width 50px div div class big div For box01我可以用height getElementById box01 style height 没关系 但对于 bo
  • 我在 Consumer 内部收到 NullPointerException

    我正在尝试生产者 消费者问题 但我不知道为什么我会遇到这样的问题java lang NullPointerException在消费者内部 package com import java util concurrent PriorityBlo
  • 使用 HTML Canvas 创建反射图像?

    我有以下代码 尝试将垂直镜像图像与透明背景颜色渐变结合起来 当组合这两种效果时 它失败了 我是否需要在画布上覆盖 PNG 渐变 而不是尝试让画布执行这两种操作
  • 从命令行进行 MariaDB 备份

    开发者控制台中用于创建备份的备份功能非常棒 然而 我希望能够实现自动化 有没有办法从 cf 命令行应用程序执行此操作 Thanks 这是不可能从cf cli 但是有一个API端点用于触发备份 API 文档 自定义扩展 Swisscom 应用
  • 导航到流。使用什么 URI(如果有)来解析相对链接?

    我有一个 WPF 应用程序 它使用
  • Laravel Vagrant Up SSH 问题

    我正在尝试在 homestead vagrant 的帮助下创建一个 Laravel 应用程序 我使用的是Windows 7开发环境 我正在使用按项目安装 并且在 Laravel 文档中我可以流浪我的项目 当我在项目中流浪时 我会陷入困境 S
  • 使用 Symfony DI 容器的原则 2

    我正在开发一个利用 Doctrine 2 的 Zend Framework 项目 我试图让 Symfony 的 DI 容器也与该项目一起工作 但我遇到了麻烦 假设我有一个类 Foo 需要注入两个实例 我可以毫无问题地设置一个 Symfony
  • 使用 lodash/Javascript 对数字数组进行排序

    我有一个字符串数组 如下所示 let arr 1 1 1 2 2 3 3 2 3 4 10 我想要如下的预期输出 1 1 1 2 2 2 3 3 3 4 10 我尝试了下面的代码 但它没有给我正确的结果 let arr 1 1 1 2 2
  • 如何从 javascript 调用 IBM Watson 服务

    我正在使用 IBM Watson 服务实现虚拟代理 我的应用程序是使用 Jquery Angular JS 和 Java 开发的 目前我正在从 java 中间层调用 watson 服务 但我想避免这种情况并直接从 javascript 调用
  • 如何使用实例引用实例?

    我试图尽量减少创建实例的次数 因为我对 Java 不是特别熟练 目前我的 Main 中有一组其他类的实例 一个简单的例子 public final class ClassName extends JavaPlugin AntiSwear a
  • iPhone:用于编辑的音频文件的 NSData 表示

    我很长时间以来一直在挠头 但没有抽出时间来解决这个问题 我还没有找到音频编辑的单个示例 我想在原始音频文件的某处插入新的音频文件 将其另存为新的转换后的音频文件 为此我编写了以下代码 我的这个想法来自here NSString file1
  • 使用 termios.h 在 C 程序中询问用户输入时,如何使箭头键和退格键正常工作?

    所以我有以下代码 基本上只是读取用户输入的字符并打印它们 直到输入 q include
  • 使用 Opencv 和 pytesseract 进行验证码预处理和求解

    Problem 我正在尝试用 Python 编写代码 以使用 Tesseract OCR 进行图像预处理和识别 我的目标是可靠地解决这种形式的验证码 原始验证码和每个预处理步骤的结果 截至目前的步骤 图像的灰度和阈值处理 使用 PIL 增强
  • Hibernate如何使用常量作为复合外部引用的一部分

    我有一个带有复合主键的主表 A 包括two列 其中一列是constant 下面代码中的 常量值 该表定义如下所示 Entity public class Master Id Column name SIGNIFICANT KEY priva