【发布时间】:2018-11-20 20:05:20
【问题描述】:
我有一个父类 Contact,它与 ContactType 是一对一的关系。
@OneToOne(cascade=CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "type")
private ContactType contactType;
我正在尝试使用扩展 JPARepository 的 ContactRepository.save() 创建一个新联系人。我收到以下错误。
违反 PRIMARY KEY 约束类型。无法在对象 ContactType 中插入重复键
如果我将联系人类型声明更改为以下:
@OneToOne(cascade=CascadeType.MERGE, orphanRemoval = true)
@JoinColumn(name = "type")
private ContactType contactType;
我收到以下错误:
对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例
用于创建联系人的代码(它只是调用 JPARepository.save()):
contactsRepository.save(contact);
如何同时使用合并和持久化数据。
【问题讨论】:
-
有多少种联系方式?请张贴联系人类型的代码?
-
Contact Type 只是一个指向 Type 表的简单类。它可以有与插入一样多的行值。
-
什么是主键?你的意思是有多少行就有多少联系人?
-
主键是字符串类型。如果用户在创建新联系人时输入新类型 Ex:"Type2",它应该在类型表中插入一个新行。如果用户输入已经存在的类型,那么它应该插入一个新行。
标签: java sql spring-boot sql-server-2012 spring-data-jpa