在使用hibernate和jpa通过MySQL数据库的Spring MVC应用程序中,每当我尝试保存包含子实体的父实体时,我都会收到有关子实体的以下错误消息:

Duplicate entry 'string1-string2' for key 'PRIMARY'

这里,string1和string2指的是子实体的复合主键的两个部分.我该如何解决这个错误?

以下是在父地址实体中定义实体之间关系的方式:

@ManyToOne(cascade = { CascadeType.ALL }, fetch=FetchType.EAGER)

@JoinColumns({ @JoinColumn(name = "usecode", referencedColumnName = "code", insertable = false, updatable = false),

@JoinColumn(name = "usecodesystem", referencedColumnName = "codesystem", insertable = false, updatable = false)

})

public HL7GeneralCode use;

以下是在子GeneralCode实体中定义关系的方式:

@OneToMany(mappedBy = "use", cascade = {CascadeType.ALL})

private Set addresses;

可以读取GeneralCode实体的完整代码at this link.

可以在at this link找到复合主键类的代码.

并且可以在at this link找到由Address扩展的BaseEntity类.

我已经阅读了很多关于此错误消息的帖子.其他帖子的答案不能解决我的错误消息,并且它们通常不解决我的实体使用复合主键的事实.

编辑:

持久化地址的代码是:

@Override

public void savehl7Address(HL7Address addr) {

if ((Integer)addr.getId() == null) {

System.out.println("[[[[[[[[[[[[ about to persist address ]]]]]]]]]]]]]]]]]]]]");

this.em.persist(addr);}

else {

System.out.println("]]]]]]]]]]]]]]]]]] about to merge address [[[[[[[[[[[[[[[[[[[[[");

this.em.merge(addr);}

}

第二次编辑:

我试着按照@ Ben75的建议,但是代码在this.em.persist(addr.getUse());行崩溃了.请注意,他的if子句不适合我的实际对象模型,因此我将下面的if子句更改为if(addr.getUse()!= null&& addr.getId()== null).这是我的代码.

@Override

public void savehl7Address(HL7Address addr) {

if(addr.getUse() != null && addr.getId()==null){

//this next line prints in the stack trace right before the app crashes

System.out.println("about to this.em.persist(addr.getUse());");

//HL7GeneralCode is not persistent yet

this.em.persist(addr.getUse());

//since there is a cascade ALL on the adresses relationship addr is now persistent

return;

}

System.out.println("=========================== inside jpahl7patientrespository.savehl7Address(addr)");

if ((Integer)addr.getId() == null) {

System.out.println("[[[[[[[[[[[[ about to persist address ]]]]]]]]]]]]]]]]]]]]");

this.em.persist(addr);}

else {

System.out.println("]]]]]]]]]]]]]]]]]] about to merge address [[[[[[[[[[[[[[[[[[[[[");

this.em.merge(addr);}

}

HL7Address的相关部分现在是:

@ManyToOne(fetch=FetchType.EAGER)

@JoinColumns({ @JoinColumn(name = "usecode", referencedColumnName = "code", insertable = false, updatable = false),

@JoinColumn(name = "usecodesystem", referencedColumnName = "codesystem", insertable = false, updatable = false)

})

public HL7GeneralCode use;

HL7GeneralCode的相关部分现在是:

@OneToMany(mappedBy = "use")

private Set addresses;

我该如何解决这个错误?

第三次编辑:

我通过将以下代码添加到保存地址方法来遵循ben75的建议:

if(addr.getUse() != null && !this.em.contains(addr.getUse())){

System.out.println("about to this.em.persist(addr.getUse());");

this.em.persist(addr.getUse());return;

}

不幸的是,尽管堆栈跟踪SYSO指示上面的代码在应用程序崩溃之前运行,但我仍然得到相同的错误.

java primary,java – 键’PRIMARY’的重复条目’string1-string2′相关推荐

  1. java 可重复map_map的键值可以重复吗

    java map的key可以重复吗 如果重复添加的话,hashmap会自动覆盖key一样的数据,保证一个key对应一个value 也就是说,你只要把一个map2里的数据按照key一个一个都加到map1 ...

  2. SpringBoot 提示:java.lang.IllegalStateException: No primary or default constructor found for interface

    SpringBoot集成MyBatis-Plus 实现HTPP POST提交实体对象提示如下错误片段: c.c.c.c.a.BaseControllerExceptionHandler : 运行时异常 ...

  3. java.lang.IllegalStateException: No primary or default constructor found for interface java.util

    java.lang.IllegalStateException: No primary or default constructor found for interface java.util.Lis ...

  4. Java进阶 主键和外键的使用区别

    文章目录 Java进阶 主键和外键的使用区别 一.主外键定义 二.主外键用法&意义 三.如何创建外键 Java进阶 主键和外键的使用区别 一.主外键定义 主键,primary key:是被挑选 ...

  5. 主键(Primary Key)设置

    版权声明:Copyright©2008-2020,david, All Rights Reserved, 本文为博主原创文章,转载请标明出处. https://blog.csdn.net/jssg_t ...

  6. Mysql完整性约束详解(字段唯一,非空,主键primary key,外键foreign key,自增长auto_increment)

    引入 1.什么是完整性约束, 为什么使用 为了规范数据格式, 在用户进行插入.修改.删除等操作时,DBMS(数据库管理系统(Data Base Management System))自动按照约束条件对 ...

  7. java去重复的集合_如何去除Java中List集合中的重复数据

    1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...

  8. 使用Java让android手机自动执行重复重启

    使用Java让android手机自动执行重复重启 public static void main(String[] args)throws IOException,Exception { for(in ...

  9. 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)

    1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...

  10. 【实施工程师之家】——mysql四种索引PRIMARY(主键索引)、INDEX(一般索引)、UNIQUE(非空索引)、FULLTEXT(全文索引)应用

    mysql四种索引PRIMARY(主键索引).INDEX(一般索引).UNIQUE(非空索引).FULLTEXT(全文索引)应用 目录 1)PRIMARY: 2)NORMAL: 3)UNIQUE: 4 ...

最新文章

  1. Microsoft NLayerApp案例理论与实践 - 项目简“.NET研究”介与环境搭建
  2. 为什么需要ORM 框架
  3. 菜鸟linux的sed,Linux sed命令菜鸟入门
  4. jqgrid本地数据例子_办公系统私有云公有云和本地化部署,你选哪个?
  5. 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
  6. 简单的线路的界面的调用方法
  7. Spring MVC验证器:Validator接口和ValidationUtils类
  8. 变压器综合试验台的功能到底有多强大?
  9. 刷题42-m升水倒入n个杯子(动态规划)
  10. 2022年深圳市高新技术企业认定奖励补贴以及可以享受的政策有哪些?
  11. 走进信息隐藏的世界,全面讲解信息隐藏——第1节:信息隐藏技术简介
  12. oracle-01722,函数subtr,instr
  13. Qt入门01 创建第一个Qt程序
  14. Excel图表设置X轴位置为最底部
  15. 计算机关机键桌面,如何在电脑桌面添加一个关机图标?
  16. 【云计算】实验3:Keystone 组件
  17. 在后台删除新闻时,需要删除服务器上的文件夹
  18. 极空间家庭私有云,您的数字资产大管家
  19. DEEP COMPRESSION(深度学习网络参数压缩)
  20. 逻辑推理题-用C++实现(1)--谁是窃贼

热门文章

  1. aptio setup utility怎么设置u盘启动_CentOS 7下载及系统U盘制作
  2. aix服务器端口配置文件,aix配置(IP,子网掩码,DNS)网络接口的三种方式
  3. Arduino--LCD1602(4bit)
  4. 400W的TVS型号大全
  5. java当前时间转化毫秒_Java学习笔记-时间相关类
  6. Singleton模式(单例模式) 饿汉式和懒汉式
  7. ES6——class
  8. VS 团队资源管理 强制解锁锁定文件
  9. 在MAC系统的eclipse里打开android sdk manager
  10. C#开发XML WebService接口(SOAP)