java primary,java – 键’PRIMARY’的重复条目’string1-string2′
在使用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′相关推荐
- java 可重复map_map的键值可以重复吗
java map的key可以重复吗 如果重复添加的话,hashmap会自动覆盖key一样的数据,保证一个key对应一个value 也就是说,你只要把一个map2里的数据按照key一个一个都加到map1 ...
- SpringBoot 提示:java.lang.IllegalStateException: No primary or default constructor found for interface
SpringBoot集成MyBatis-Plus 实现HTPP POST提交实体对象提示如下错误片段: c.c.c.c.a.BaseControllerExceptionHandler : 运行时异常 ...
- 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 ...
- Java进阶 主键和外键的使用区别
文章目录 Java进阶 主键和外键的使用区别 一.主外键定义 二.主外键用法&意义 三.如何创建外键 Java进阶 主键和外键的使用区别 一.主外键定义 主键,primary key:是被挑选 ...
- 主键(Primary Key)设置
版权声明:Copyright©2008-2020,david, All Rights Reserved, 本文为博主原创文章,转载请标明出处. https://blog.csdn.net/jssg_t ...
- Mysql完整性约束详解(字段唯一,非空,主键primary key,外键foreign key,自增长auto_increment)
引入 1.什么是完整性约束, 为什么使用 为了规范数据格式, 在用户进行插入.修改.删除等操作时,DBMS(数据库管理系统(Data Base Management System))自动按照约束条件对 ...
- java去重复的集合_如何去除Java中List集合中的重复数据
1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...
- 使用Java让android手机自动执行重复重启
使用Java让android手机自动执行重复重启 public static void main(String[] args)throws IOException,Exception { for(in ...
- 数据库六大约束用法:主键(primary key)、外键(foreign key)、非空(not null)、默认(default)、检查(check)、唯一(unique)
1. 数据库有六大约束 主键(primary key) 外键(foreign key):被参照的键必须有唯一约束或是主键 非空(not null) 默认(default) 检查(check):orac ...
- 【实施工程师之家】——mysql四种索引PRIMARY(主键索引)、INDEX(一般索引)、UNIQUE(非空索引)、FULLTEXT(全文索引)应用
mysql四种索引PRIMARY(主键索引).INDEX(一般索引).UNIQUE(非空索引).FULLTEXT(全文索引)应用 目录 1)PRIMARY: 2)NORMAL: 3)UNIQUE: 4 ...
最新文章
- Microsoft NLayerApp案例理论与实践 - 项目简“.NET研究”介与环境搭建
- 为什么需要ORM 框架
- 菜鸟linux的sed,Linux sed命令菜鸟入门
- jqgrid本地数据例子_办公系统私有云公有云和本地化部署,你选哪个?
- 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
- 简单的线路的界面的调用方法
- Spring MVC验证器:Validator接口和ValidationUtils类
- 变压器综合试验台的功能到底有多强大?
- 刷题42-m升水倒入n个杯子(动态规划)
- 2022年深圳市高新技术企业认定奖励补贴以及可以享受的政策有哪些?
- 走进信息隐藏的世界,全面讲解信息隐藏——第1节:信息隐藏技术简介
- oracle-01722,函数subtr,instr
- Qt入门01 创建第一个Qt程序
- Excel图表设置X轴位置为最底部
- 计算机关机键桌面,如何在电脑桌面添加一个关机图标?
- 【云计算】实验3:Keystone 组件
- 在后台删除新闻时,需要删除服务器上的文件夹
- 极空间家庭私有云,您的数字资产大管家
- DEEP COMPRESSION(深度学习网络参数压缩)
- 逻辑推理题-用C++实现(1)--谁是窃贼
热门文章
- aptio setup utility怎么设置u盘启动_CentOS 7下载及系统U盘制作
- aix服务器端口配置文件,aix配置(IP,子网掩码,DNS)网络接口的三种方式
- Arduino--LCD1602(4bit)
- 400W的TVS型号大全
- java当前时间转化毫秒_Java学习笔记-时间相关类
- Singleton模式(单例模式) 饿汉式和懒汉式
- ES6——class
- VS 团队资源管理 强制解锁锁定文件
- 在MAC系统的eclipse里打开android sdk manager
- C#开发XML WebService接口(SOAP)