在hibernate spring boot中重写外键和唯一约束创建

j2qf4p5b  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(209)

我在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表显式工作。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题