gpt4 book ai didi

spring - 使用@ManyToMany JPA 注释时不需要的唯一约束

转载 作者:行者123 更新时间:2023-12-05 06:42:07 28 4
gpt4 key购买 nike

我正在为我的项目使用 spring-boot/spring-data-jpa。当 spring.jpa.hibernate.ddl-auto 设置为更新时,下面的实体将在 oracle 中创建表。

@Entity
@Table(name = "SCENARIO")
public class Scenario {

private Integer worksetId;
private Integer ruleSetId;
private Set<Rule> rules;

@Id
public Integer getWorksetId() {
return worksetId;
}

public void setWorksetId(Integer worksetId) {
this.worksetId = worksetId;
}

@Column(name = "RULE_SET_ID")
public Integer getRuleSetId() {
return ruleSetId;
}

public void setRuleSetId(Integer ruleSetId) {
this.ruleSetId = ruleSetId;
}

@ManyToMany
@JoinTable(name = "RULE_SET", joinColumns = @JoinColumn(name = "WORKSET_ID", referencedColumnName = "RULE_SET_ID"), inverseJoinColumns = @JoinColumn(name = "RULE_ID", referencedColumnName = "ID"))
public Set<Rule> getRules() {
return rules;
}

public void setRules(Set<Rule> rules) {
this.rules = rules;
}

}

@Entity
@Table(name = "RULE")
public class Rule {
private Integer id;
private String description;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

}

我的期望非常简单,即会创建 SCENARIO/RULE 表,以及名为 RULE_SET 的映射表。一切顺利,除了在表 SCENARIO 中创建了一个不需要的 RULE_SET_ID 唯一约束,但显然相同的 RULE_SET_ID 应该能够被多个场景共享。有人可以帮忙吗?非常感谢!!

顺便说一句,我正在使用 spring-boot 1.4.0 和 hibernate 5.0.9

最佳答案

显然,如果您执行 referencedColumnName = "RULE_SET_ID"RULE_SET_ID — 应该是唯一的。

您可以为场景使用代理键

@Entity
@Table(name = "SCENARIO")
public class Scenario {

@Id
@GeneratedValue
private Integer id;

}

并使用一个@ManyToMany映射

@ManyToMany
@JoinTable(name = "RULE_SET", joinColumns = @JoinColumn(name = "WORKSET_ID"),
inverseJoinColumns = @JoinColumn(name = "RULE_ID"))
public Set<Rule> getRules() {
return rules;
}

更新

我想将 RuleSet 实体用于一组规则(使用连接表进行映射):

@Entity
class RuleSet {

@OneToMany
private List<Rule> rules = new ArrayList<Rule>();

}

关于spring - 使用@ManyToMany JPA 注释时不需要的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38452063/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com