我在spring启动应用程序中有下面的hibernate关系。
@Entity
@Table(name = "projects")
public class Project {
@Embedded
private ProjectParameters parameters;
}
@Embeddable
public class ProjectParameters {
@Column(name = "hvacConfigs")
@ElementCollection(targetClass = HVACUserConfigModel.class)
@CollectionTable(uniqueConstraints = @UniqueConstraint(columnNames = {}), foreignKey = ForeignKey(name = "project_hvacConfig_fk"))
private Set<HVACUserConfigModel> hvacConfigs;
}
@Entity
@Table(name = "hvacuserconfig")
public class HVACUserConfigModel {
@Id
@GeneratedValue
private Integer id;
}
mysql表自动生成如下。请打开这些图片在下面的链接,因为我没有10声誉张贴在stackoverflow图像。
问题是我能够保存多个项目与同一个项目如下
Project_uid | hvacConfigs_id
------------------------------
1001 | 1
1001 | 2
添加(1002 | 1)将引发唯一约束冲突。
我可以通过使用mysql workbench显式地更改表定义,通过删除惟一的约束uk\u me0ekntab0gknshag0xjv35x来实现它。要删除unique constrain,我必须首先删除unique constrain引用的外键constrain fkeygnr2stdchxqpb5wuinf2。在这些更改之后,我从spring boot app中插入新行,它成功地添加了值(1002 | 1)和(1002 | 2)。
我能够探索@collectiontable注解,在java代码的hvacconfigs字段中注解,提供了插入uniqueconstraint和foreignkey定义作为属性定义一部分的方法。我尝试过调整annotation的这些属性,但没有成功。
请让我知道,如果你有任何解决方案,如何覆盖唯一的约束和外键约束使用java代码,使这不需要任何手动调整mysql表显式工作。
暂无答案!
目前还没有任何答案,快来回答吧!