如何在没有 JoinTables 的 JPA 中创建一对多关系?

2024-04-24

我正在尝试使用以下表结构在 JPA 中创建 @OneToMany 关系。

+----------------+
| CATALOG        |
+----------------+
| catalogId : PK |
| name           |
+----------------+
      |
+----------------+
| PRODUCT        |
+----------------+
| productId : PK |
| name           |
| catalogId : FK |
+----------------+

我将类定义为

@Entity
public class Catalog {
    @Id
    @GeneratedValue
    long catalogId;

    @OneToMany(cascade = CascadeType.ALL, 
               orphanRemoval = true, fetch = FetchType.LAZY)
    @JoinColumn(name = "catalogId", 
               nullable = false, insertable = true, updatable = true)
    Set<Product> products = new HashSet<>();

    String name;
}

@Entity
public class Product {
    @Id
    @GeneratedValue
    long productId;

    String name;
}

但是,当我尝试保留目录对象时,EclipseLink 没有按预期放入catalogId 值,并且我收到了 SQL 约束冲突,其中存在空值。

另外,我不需要也不想要产品端的@ManyToOne。

持久化代码:

final Catalog catalog = new Catalog();
catalog.name = text;
final Product p = new Product();
p.name = text;
catalog.products.add(p);
em.persist(catalog);

堆栈跟踪:

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: Column 'CATALOGID'  cannot accept a NULL value.
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1367)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1295)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1301)
    at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:866)
    at net.trajano.maven_jee6.ws_mdb_ejb_web.TextMessages.putText(TextMessages.java:61)

当您将一个表“产品”上的列的所有权授予另一个实体“目录”时,该列将作为持久目录的一部分(而不是持久产品的一部分)进行更新和维护。该框架将创建一个产品,但由于 FK 列由不同的实体“拥有”,因此它将使用持久化目录时生成的单独更新语句来填充该产品。您需要使该列可为空,或者将该列的所有权置于映射该表的同一实体上。

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

如何在没有 JoinTables 的 JPA 中创建一对多关系? 的相关文章

随机推荐

  • Git 致命:参考格式无效:'refs/heads/master

    我在用Dropbox同步git存储库 但现在当我尝试push我收到错误 fatal Reference has invalid format refs heads master MacBook Pro s conflicted copy 2
  • 如何从 Google Colab 笔记本运行“.py”文件中的 Python 脚本?

    javascript IPython OutputArea prototype should scroll function lines return false run rl base py 我运行此错误 提示 rl base py 文件
  • Cordova 通知插件安装失败(Cordova 3.6)

    我已经将项目从 Cordova 3 4 更新到 3 6 3 但一切都崩溃了 像往常一样 但具体来说 这里org apache cordova dialogs插件在 ios 上运行时无法工作 Cordova 表示插件已安装 cordova p
  • kotlin-stdlib-jre7 已弃用。请改用 kotlin-stdlib-jdk7

    昨天我更新了Android Studio版本和Kotlin插件版本 Android Studio版本 3 1 2 Kotlin 版本 1 2 41 当我使用此配置创建 Android 项目时 我收到 Kotlin 编译器警告 w home
  • 访问被拒绝查找属性 ro.vendor.hwui.texture_cache_size

    在启动活动时我收到此错误 Access denied finding property ro vendor hwui texture cache size 在 Android OREO 之前一切都工作正常 但在 Android Pie 中却
  • 如何在android中一次完成多个活动?

    我的活动流程如下 活动 A gt 活动 B gt 活动 C gt 活动 D 当用户位于活动 D 上并单击名为 退出 的按钮时 应用程序应返回到活动 B 并完成活动 C 并D 我该怎么做 注意 活动 B 和活动 D 是相同的类 但不同的实例
  • Seaborn 用直方图绘制分布图,其中 stat = 密度或概率?

    我知道 默认情况下 直方图方法是计算出现次数 相反 我们可以用密度或概率来可视化分布 sns displot data stat density or sns displot data stat probability 我的问题是我应该使用
  • 如何设置USB连接模式?

    我正在编写一个应用程序 该应用程序应该将数据转储到 SD 卡上 然后在 PC 上编写另一个应用程序 当设备连接到 PC 时 在光盘驱动器模式下 该应用程序应该读取数据 在我的 HTC Legend 上 有一个对话框可供选择 仅充电 HTC
  • Rails:检索嵌套数据时出错

    我尝试模拟一个系统 其中学生在与练习相关的盒子中工作 class Student lt ActiveRecord Base belongs to box class Box lt ActiveRecord Base belongs to p
  • WPF可编辑组合框IsFocused问题

    我正在开发一个带水印的ComboBox通过修改ComboBox ControlTemplate 当一切都很好ComboBox不处于可编辑模式 但是当我将编辑模式更改为 True 时 IsFocused属性永远不会设置为 True 这是因为在
  • 为什么复制 eval 会改变它的行为?

    根据rollupjs 文档 https rollupjs org guide en eval2 eval 简单地 复制 eval 为您提供了一个执行完全相同操作的函数 但该函数在全局范围而不是本地范围内运行 var eval2 eval f
  • 如何避免硬编码密钥进行加密(目标 C)?

    在我的 Objective C 代码中 我在代码中硬编码了一个消费者密钥和秘密 以用于 SHA 1 加密 我想知道是否可以避免硬编码以提高安全性 到目前为止我发现了以下内容 发现1 https www owasp org index php
  • ECMAScript 6 的 function.name 属性

    简单问题 这段代码的正确结果是什么 let f function let n f name or f 根据兼容表 http kangax github io compat table es6 n应该有这个值 f 然而 Mozilla 文档
  • 正则表达式捕获部分行

    我一直在努力捕获 snmp 响应的一部分 Text IF MIB ifDescr 1 1 1 g1 Office to DMZ Regex P
  • 如何使用我自己的 CSS 设计 Twitter 小部件的样式

    我有自己的 Twitter feed 设计 并且我想使用我自己的设计来设计默认 feed 的样式 有没有办法做到这一点 问题是您无法使用 CSS 选择器 因为它仅在加载页面后才出现 请检查这张图片 让您更多地了解我需要什么 Thanks 好
  • 使用 FileSystemWatcher 从文件中获取新行

    我正在观看一个包含以下代码的文件 FileSystemWatcher watcher new FileSystemWatcher watcher Path C watcher Filter t log watcher Changed new
  • matlab中的分箱

    我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作 我有一个两列的矩阵 m x 和 y 值 我知道我可以通过执行 m 1 或 m 2 来提取列 我想将其分成 可能 大小相等的较小矩阵 并绘制这些矩阵的平均值 换句话说
  • 替换sql server 2000中的ntext(超过4000个字符)

    如何替换sql server 2000中ntext列中超过4000个字符的文本 转换为 nvarchar max 不起作用 因为它会截断值 使用 TEXT NTEXT 是一团糟 这是尽快摆脱这些字段的众多原因之一 您需要使用 READTEX
  • 如何在Linux内核中启用CONFIG_PREEMPT选项?

    我是 Linux 内核编程的新手 尝试在 x86 64 上使用旧内核 Linux 2 6 32 我想启用其中的 CONFIG PREEMPT 选项 但找不到有关如何执行此操作的信息 我可以使用我的首选选项编译新内核 但不知道在这种情况下我需
  • 如何在没有 JoinTables 的 JPA 中创建一对多关系?

    我正在尝试使用以下表结构在 JPA 中创建 OneToMany 关系 CATALOG catalogId PK name PRODUCT productId PK name catalogId FK 我将类定义为 Entity public