如何在 Hibernate 中将多个值类型集合映射到一张表?

2023-12-13

出于性能原因,我试图将休眠中的许多值类型集映射到一张表。 首先,我确实将它们全部放在自己的表中,这导致了太多的连接。

我有一个类别类,其中包含许多带有一组集合的组件,然后我使用实体名称和鉴别器通过子类将它们映射到单个表。 请参阅下面的映射片段。

这工作正常,但由于包含所有集合的单个表,因此在删除组件时很难自动删除集合。这是因为它被建模为实体,并且 Hibernate 无法发出该集已被删除的信号。

映射详细信息:

<class name="com.sample.CategoriesDefault" table="dec_cats" >
 <id name="id" column="id" type="string" length="40" access="property">
  <generator class="assigned" />
 </id>
 <component name="incomeInfoMember" class="com.sample.IncomeInfoDefault">
   <property name="hasWage" type="boolean" column="inMemWage"/>
    ...
   <component name="wage" class="com.sample.impl.WageDefault">
     <property name="hasEmployerWage" type="boolean" column="inMemEmpWage"/>
      ...
     <set name="employerWages" cascade="all-delete-orphan" lazy="false">
      <key column="idCats" not-null="true" />
      <one-to-many entity-name="mIWaEmp"/>
     </set>
   </component>
 </component>
</class>

<class name="com.sample.NameValueTypeEntityMarker" table="cats_name_amount">
 <id name="id" column="id" type="string" length="40" access="property">
  <generator class="assigned" />
 </id>
 <discriminator type="string" force="true">
   <column name="objType" index="ixDiscrCatsNameAmt" length="25" not-null="true" />
 </discriminator>
 <version name="version" column="objVrs"  unsaved-value="negative"/>

 <property name="name" type="string" column="name" not-null="true" />
 <subclass name="com.sample.NameAmountsIntValueTypeEntityMarker">
  <property name="amount1" type="integer" column="amount1" access="property" not-null="true"/>
   ...
   <subclass entity-name="mIWaEmp" name="com.sample.EmployerWageDefault" discriminator-value="mIWaEmp" />
   <subclass entity-name="pIWaEmp" name="com.sample.impl.EmployerWageDefault" discriminator-value="pIWaEmp" />
 </subclass>
</class>

Usage:

Categories cats = new CategoriesDefault();
Wage wage = new Wage();
Set<EmployerWage> set = new HashSet<EmployerWage>();
set.add(new EmployerWageDefault(cats));
wage.setEmployerWages(set);
IncomeMember inc = new IncomeMemberDefault();
inc.setWage(wage);
cats.setIncomeMember(inc);
cats.saveOrUpdate(); // will store it in the db.

// now remove the income:
cats.setIncomeMember(null);
cats.saveOrUpdate();
cats = getPersister().findCats(cats.getId());
// ERROR: cats still contains IncomeMember, Wage and EmployerWages.

发生此错误的原因是 EmployerWages 不会自动删除,因为它们被标记为类别的子级(请参阅关键列),因此当类别被删除时,它们会作为孤儿被删除,而不是在其组件被删除时... 但是,我不能让 EmployerWages 成为 Wage 的子项,因为 Wage 是一个组件,然后 Hibernate 会抱怨......

噗……这个问题很难解决。想法更受欢迎......


不确定这是否有帮助,但是您是否尝试过使用鉴别器列来告诉 Hibernate 根据表中的不同标准加载哪种值类型?

http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping-declaration-discriminator

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

如何在 Hibernate 中将多个值类型集合映射到一张表? 的相关文章

随机推荐

  • 在 Java 中从 URL 读取 JSON 的最简单方法

    这可能是一个愚蠢的问题 但是最简单的阅读和解析方法是什么JSON from URL in Java 在 Groovy 中 只需几行代码即可 我发现的 Java 示例长得离谱 并且有巨大的异常处理块 我想做的就是阅读内容这个链接 使用 Mav
  • 根据 Pandas 中的行匹配,有条件地使用另一个 DataFrame 中的值填充列

    我发现自己在尝试解决这个问题 自动化税务文书工作 时迷失了方向 我有两个数据框 一个包含欧元 美元汇率的季度历史记录 另一个包含我自己的发票 例如 import pandas as pd import numpy as np usdeur
  • 构建 Google App 脚本以将相似的行合并为一行

    很多人都在问我为什么要做这个 我想这样做 以便当我进行邮件合并 这从图书馆向学生发送逾期图书列表 时 我不会多次向学生发送电子邮件 我从来没有多次使用这些数据 我只用它来发送快速消息 我从不操纵或使用这些数据 所以我不在乎它是否很难使用 我
  • R语言文本摘要

    我有一个很长的文本文件 使用以下帮助R language我想用至少 10 到 20 行或小句子来总结文本 如何用至少 10 行总结文本R language 你可以尝试这个 来自LSAfun包裹 genericSummary D k 1 其中
  • 运行 gulp 时出现“任务函数必须在 Gulp.set 中指定”错误

    我在安装gulp时总是遇到同样的错误 C Users Thomas Desktop Sites CT Graphics colpaertmarc be gt gulp assert js 350 throw err AssertionErr
  • 如何在 python 海龟中将文本制作成按钮?

    我想将 CAT 一词制作成一个按钮 因此当单击它时 它会显示 CAT 另外 当我想要的按钮不是按钮时 它应该位于单词现在所在的位置 需要提供任何帮助 谢谢 我已经尝试过 tkinter 模块 但问题是它使用按钮打开一个单独的窗口 我想要的是
  • 如何销毁特定的 PHP 会话

    我正在寻找有关如何销毁 PHP 中的特定会话的见解 通过合作伙伴网站 用户使用令牌登录主网站并获得完整的会话 如果用户从合作伙伴网站注销 合作伙伴网站也可以调用销毁函数 然后我们还应该注销我们自己的用户 对此最好的方法是什么 这Zend S
  • Spark 支持子查询吗? [复制]

    这个问题在这里已经有答案了 当我运行此查询时 我收到此类错误 select from raw 2 where ip NOT IN select from raw 1 org apache spark sql AnalysisExceptio
  • D3 mousedown事件删除错误的节点

    我正在尝试在此添加删除节点功能jsfiddle The refresh方法是添加on mousedown mousedownNode 每个圆圈的事件 但是当我单击节点时GW2它删除了DB节点 我发现mousedownNode方法删除了正确的
  • ElasticSearch (2.2) startDate 和 endDate 之间的 Java 过滤器(如果存在)

    我想要使 用elasticsearch java客户端 进行以下过滤 如果 startDate 存在且低于现在 如果 endDate 存在且大于现在 我已经有以下内容 但它没有显示没有开始日期或结束日期的一次 Start date end
  • jQuery 中 $.getJSON() 和 $.ajax() 之间的区别

    我正在调用 ASP NET MVC 操作 public JsonResult GetPatient string patientID 使用 jQuery 从 JavaScript 生成 以下调用有效 getJSON Services Get
  • jquery - 从回调函数(在发布请求中)返回值到其内部的函数中?

    我有一个 javascript 函数 它将数据发送到验证脚本并从那里获取值 post 请求上的回调函数返回一个布尔值 我试图获取entire函数返回该布尔值 现在 回调函数返回正确的值 但函数本身不返回任何内容 这是代码 function
  • 某个时间点的事件队列量

    我有一个事件队列 由记录数字字符串 打开时间 日期时间和关闭时间 日期时间组成 这些记录可以追溯到一年左右 我想要得到的是一个折线图 显示每天晚上 8 点的队列量 因此 如果票证在当天晚上 8 点之前或前一天的任何时间打开 但截至 8 点尚
  • HTML5 画布上的图像渐变

    我想在图像上获得径向渐变效果 alpha 1中间透明 边缘透明 您对我如何做到这一点有什么想法吗 如果我没记错的话你想做的是 绘制图像 在其上绘制径向渐变 其中边界是透明的 中间是不透明的 并使用globalCompositeOperati
  • SQL:OPENROWSET,无法构建请求字符串?

    我想构造与 OPENROWSET 方法一起使用的查询 Example SELECT FROM OPENROWSET SQLOLEDB srv login mdp SELECT FROM Case WHERE ID caseID 但是当我这样
  • 无法重新分配自动全局变量 _POST

    我收到以下错误 Fatal error Cannot re assign auto global variable POST in C Program Files x86 Zend Apache2 htdocs includes class
  • 我们如何在 iPhone Xcode 中处理多个 NSURLConnection?

    我正在开发一个小应用程序 其中有多个 NSURLConnection 我已经创建了该 NSURL 连接 但我不知道如何处理它 我的代码如下所示 void loadTrafficAndEvent int a 10 Get the map vi
  • 错误:Android 上的自签名 SSL 证书名称不匹配

    我正在尝试使用内置浏览器从 Android 2 3 4 访问受 SSL 保护的 Web 应用程序 服务器证书是我使用创建的自签名证书MAKECERT并安装在服务器上 当我尝试访问该页面时 我从浏览器收到一条错误消息 指出The name o
  • 如何在Unity中通过脚本创建动画剪辑?

    我想创建一个AnimationClip在脚本中针对GameObject在统一中 但是 我不知道该怎么做 我已将以下代码附加到GameObject在 Cube 中并按下播放按钮 但是 我得到了错误输出 using UnityEngine us
  • 如何在 Hibernate 中将多个值类型集合映射到一张表?

    出于性能原因 我试图将休眠中的许多值类型集映射到一张表 首先 我确实将它们全部放在自己的表中 这导致了太多的连接 我有一个类别类 其中包含许多带有一组集合的组件 然后我使用实体名称和鉴别器通过子类将它们映射到单个表 请参阅下面的映射片段 这