Spring + Hibernate:具有相同标识符值的不同对象已与会话关联

2023-11-24

在我使用 Spring 和 Hibernate 的应用程序中,我解析 CSV 文件并通过调用填充数据库handleRow()每次从 CSV 文件读取一条记录时。

我的域模型:

“家族”有很多“子家族”

“亚科”有很多“轨迹”

“轨迹”属于“物种”

Family <-> SubFamily <-> Locus都是双向映射。

Code:

public void handleRow(Family dummyFamily, SubFamily dummySubFamily, Locus dummyLocus) {
  //Service method which access DAO layers
  CommonService serv = ctx.getCommonService();

  boolean newFamily=false;
  Family family=serv.getFamilyByFamilyId(dummyFamily.getFamilyId());
  if(family==null){
    newFamily=true;
    family=new Family();
    family.setFamilyId(dummyFamily.getFamilyId());
    family.setFamilyIPRId(dummyFamily.getFamilyIPRId());
    family.setFamilyName(dummyFamily.getFamilyName());
    family.setFamilyPattern(dummyFamily.getFamilyPattern());
    family.setRifID(dummyFamily.getRifID());
  }

  SubFamily subFamily = family.getSubFamilyBySubFamilyId( dummySubFamily.getSubFamilyId() );
  if(subFamily==null){   
    subFamily=new SubFamily();
    subFamily.setRifID(dummySubFamily.getRifID());   
    subFamily.setSubFamilyId(dummySubFamily.getSubFamilyId());
    subFamily.setSubFamilyIPRId(dummySubFamily.getSubFamilyIPRId());
    subFamily.setSubFamilyName(dummySubFamily.getSubFamilyName());
    subFamily.setSubFamilyPattern(dummySubFamily.getSubFamilyPattern());

    family.addSubFamily(subFamily);
  }

  //use the save reference, to update from GFF handler
  Locus locus = dummyLocus;

  subFamily.addLocus(locus);

  assignSpecies(serv,locus);
  //Persist object
  if(newFamily){
    serv.createFamily(family);
  } else {
    serv.updateFamily(family);
  }
}

使用以下方法将物种分配给轨迹,该方法只需访问 DAO 层:

private void assignSpecies (CommonService serv, Locus locus) {
  String locusId = locus.getLocusId();
  String speciesId = CommonUtils.getLocusSpecies(locusId, ctx.getSpeciesList()).getSpeciesId();
  //Simply get Species object from DAO
  Species sp = serv.getSpeciesBySpeciesId(speciesId);
  locus.setSpecies(sp);  
}

Hibernate 报如下错误:

[INFO] Starting scheduled refresh cache with period [5000ms]
Hibernate: insert into species (species_id, name) values (?, ?)
Hibernate: insert into species (species_id, name) values (?, ?)
Hibernate: insert into species (species_id, name) values (?, ?)
############################ROW#####################1
SubFamiyID#######RIF0005913
Hibernate: select this_.id as id1_0_, this_.family_id as family2_1_0_, this_.rif_iD as rif3_1_0_, this_.family_name as family4_1_0_, this_.family_ipr_id as family5_1_0_, this_.family_pattern as family6_1_0_ from family this_ where this_.family_id=?
Creating NEW SubFamiyID#######RIF0005913
Hibernate: select this_.id as id3_0_, this_.species_id as species2_3_0_, this_.name as name3_0_ from species this_ where this_.species_id=?
Hibernate: insert into family (family_id, rif_iD, family_name, family_ipr_id, family_pattern) values (?, ?, ?, ?, ?)
Hibernate: insert into subfamily (sub_family_id, rif_iD, sub_family_name, sub_family_ipr_id, sub_family_pattern, family_id, sub_family_index) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into locus (locus_id, refTrans_id, function, species_id, sub_family_id, sub_family_index) values (?, ?, ?, ?, ?, ?)
Hibernate: update species set species_id=?, name=? where id=?
Hibernate: update subfamily set family_id=?, sub_family_index=? where id=?
Hibernate: update locus set sub_family_id=?, sub_family_index=? where id=?
############################ROW#####################2
SubFamiyID#######RIF0005913
Hibernate: select this_.id as id1_0_, this_.family_id as family2_1_0_, this_.rif_iD as rif3_1_0_, this_.family_name as family4_1_0_, this_.family_ipr_id as family5_1_0_, this_.family_pattern as family6_1_0_ from family this_ where this_.family_id=?
Hibernate: select subfamilie0_.family_id as family7_1_, subfamilie0_.id as id1_, subfamilie0_.sub_family_index as sub8_1_, subfamilie0_.id as id0_0_, subfamilie0_.sub_family_id as sub2_0_0_, subfamilie0_.rif_iD as rif3_0_0_, subfamilie0_.sub_family_name as sub4_0_0_, subfamilie0_.sub_family_ipr_id as sub5_0_0_, subfamilie0_.sub_family_pattern as sub6_0_0_, subfamilie0_.family_id as family7_0_0_ from subfamily subfamilie0_ where subfamilie0_.family_id=?
Hibernate: select locuslist0_.sub_family_id as sub5_1_, locuslist0_.id as id1_, locuslist0_.sub_family_index as sub7_1_, locuslist0_.id as id2_0_, locuslist0_.locus_id as locus2_2_0_, locuslist0_.refTrans_id as refTrans3_2_0_, locuslist0_.function as function2_0_, locuslist0_.sub_family_id as sub5_2_0_, locuslist0_.species_id as species6_2_0_ from locus locuslist0_ where locuslist0_.sub_family_id=?
Hibernate: select species0_.id as id3_0_, species0_.species_id as species2_3_0_, species0_.name as name3_0_ from species species0_ where species0_.id=?
Hibernate: select this_.id as id1_0_, this_.family_id as family2_1_0_, this_.rif_iD as rif3_1_0_, this_.family_name as family4_1_0_, this_.family_ipr_id as family5_1_0_, this_.family_pattern as family6_1_0_ from family this_ where this_.family_id=?
Hibernate: select this_.id as id3_0_, this_.species_id as species2_3_0_, this_.name as name3_0_ from species this_ where this_.species_id=?
Exception in thread "main" [INFO] Closing Compass [compass]
org.springframework.orm.hibernate3.HibernateSystemException: a different object with the same identifier value was already associated with the session: [com.bigg.nihonbare.common.domain.Species#1]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.bigg.nihonbare.common.domain.Species#1]
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.bigg.nihonbare.common.domain.Species#1]
 at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:590)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:284)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:223)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:89)
 at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
 at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
 at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
 at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
 at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)

有小费吗?


Use merge()。该异常意味着当前会话已经知道您正在传递的实体。如果没有,请检查您如何覆盖hashCode() and equals()- 它应该为不同的实体返回不同的值。

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

Spring + Hibernate:具有相同标识符值的不同对象已与会话关联 的相关文章

  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 将不同类型的参数传递给 jdbctemplate 查询

    我正在尝试使用带有少量不同类型参数的 where 子句从数据库中检索记录 这是我编写的简单方法 我将breedId和性别作为参数传递 public List
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 使用 JSCH 设置目录权限 CHMOD

    在Unix中 如何使用JSCH设置目录权限 我想做 drwxrwxrwx Filezilla 说该整数是 775 但 JSCH 未正确设置权限 JSCH 设置权限后 Filezilla 说是 407 这对我有用 sftp chmod Int
  • 函数式语言:现实生活中的例子

    函数式语言可以解决日常业务问题吗 是否有使用函数式语言 最好是发布的测试用例 实施的成功项目 上面列出的有不少现实世界中的函数式编程 从网站 真实世界的主要标准是该程序主要是为了执行某些任务而编写的 而不是主要为了尝试函数式编程
  • 如何实现 MPVolumeView?

    我希望用户能够使用滑块更改系统音量 并且我意识到实现此目的的唯一方法是使用 MPVolumeView 但我找不到它的任何示例代码 并且我尝试实现的每个方法都不会显示 那么实现 MPVolumeView 最简单 正确的工作方法是什么 将其作为
  • 如何以编程方式在四开本中生成选项卡集面板?

    我在下面提供了一个可重复的小示例 我想在四开中为命名列表中的每个 ggplot 对象生成选项卡plots 下面的四开文档将在其自己的二级标题中呈现图形 但不会按预期呈现在选项卡中 title Untitled format html r l
  • 修改innerHTML后保存/恢复内容可编辑的选择

    我知道在 contentEditable 中获取 设置光标位置几乎是不可能的 我不在乎知道这些信息 我需要能够保存当前选择 修改 div 的innerHTML 然后恢复选择 我一直在尝试提供的答案contenteditable 选定的文本保
  • Windows 10 TTS 语音未显示?

    我安装了一些英语语言包 美国 英国和加拿大 及其语音选项 我可以在 Windows 10 设置 gt 语音中访问它们 但它们不会显示在控制面板提供的文本到语音选项中 我无法通过应用程序使用声音 我可以使用默认声音 David 和 Zira
  • 以此比例因子查询耗尽的资源

    我在 Amazon Athena 上运行 SQL 查询 我多次收到以下错误 以此比例因子查询耗尽的资源 此查询针对 test1 数据库运行 除非查询限定 请在我们的论坛上发布错误消息或联系客户支持并提供查询 ID 如果没有看到查询 很难确定
  • 尝试使用 XPages 将多值字段连接到 Java Bean 时出现类型不匹配

    我有这个代码
  • php 中的新限制:每个 POST 1000 个字段。有人知道这个数字是否会受到影响吗?

    在较新的 PHP 版本中 每个公式 POST 的输入字段数将限制为 1000 未经验证的信息 看来这个限制已经安装在 5 2 的某些版本中 这给我们的网上商店带来了很多问题 有人了解更多吗 这个限制是否会受到参数或变量的影响 我刚刚找到了
  • 为什么这个野牛代码会产生意外的输出?

    弹性代码 1 option noyywrap nodefault yylineno case insensitive 2 3 include stdio h 4 include tp tab h 5 6 7 8 return 9 retur
  • 如何对互联网地址进行编码

    发送电子邮件的代码如下 MimeMessage msg new MimeMessage session msg setSubject subject UTF 8 here you specify your subject encoding
  • 如何向 SqlParameter[ ] 集合添加新参数?

    我想使用类似的东西 using DataSet ds new DataSet SqlParameter dbParams new SqlParameter new SqlParameter PromptID promptID if scen
  • 如何为 alamofire Post 请求中的参数之一传递 nil 值

    我想传递一个 nil 值 即可选参数值之一 并且它必须以 nil 值继续阿拉莫菲尔 帖子请求 如果您告诉我下一步如何进行 会有帮助吗 let image UIImage UIImage let imageData UIImagePNGRep
  • 在 Perl 中,当我在同一个哈希上循环时,从哈希引用中删除键是否安全?为什么?

    我基本上想这样做 foreach my key keys hash ref Do stuff with my key and hash ref Delete the key from the hash delete hash ref gt
  • 为什么链接中的目标属性有下划线?

    我已经编码很多年了 直到此刻我才意识到这个属性target从元素 a 要求它们的所有值都以下划线开头 我们很多人都知道 但我不知道为什么 我的意思是 从我的头脑中 我不记得除此之外的另一个需要以下划线开头的值 有谁知道这个实现背后的原因是什
  • Google Play 游戏服务多人设备方向更改将用户踢出房间

    我正在开发一个只有一项活动的应用程序 它扩展了基础游戏活动 并在多个片段之间切换 很像 Google 的示例代码状态 我现在正在两台独立的设备上测试多人游戏 两个用户都可以成功登录 互相发送消息等 但是 一旦一个用户旋转设备 他们就会被踢出
  • 如何以字节块的形式播放视频?

    我想在 android 中播放我保存在资源文件夹中的视频 我已将其更改为字节数组 并且使用以下代码可以成功播放 private String getDataSource throws IOException InputStream stre
  • 在 C# 中同步包装异步方法

    我有一个第三方库 其中包含一个异步执行函数的类 该类继承自Form 该函数基本上根据数据库中存储的数据执行计算 一旦完成 它就会在调用表单中调用 Complete 事件 我想做的是从非 Windows 表单应用程序同步调用该函数 问题是 无
  • C++ 数组删除运算符语法

    我做完之后说 Foo array new Foo N 我一直都是这样删除的 delete array 然而 有时我会这样看 delete N array 由于它似乎可以编译并工作 至少在 msvc2005 中 我想知道 正确的做法是什么 那
  • Spring + Hibernate:具有相同标识符值的不同对象已与会话关联

    在我使用 Spring 和 Hibernate 的应用程序中 我解析 CSV 文件并通过调用填充数据库handleRow 每次从 CSV 文件读取一条记录时 我的域模型 家族 有很多 子家族 亚科 有很多 轨迹 轨迹 属于 物种 Famil