我有两个物体。
值:
@Table(name = "entity")
@Entity(name = "entity")
public class Entity
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
protected long id;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "entity_value_list", joinColumns = {
@JoinColumn(referencedColumnName = "id", nullable = false)}, inverseJoinColumns = {
@JoinColumn(referencedColumnName = "id", nullable = false)})
@Fetch(FetchMode.SELECT)
private List<RandomValue> values;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "hidden_entity_value_list", joinColumns = {
@JoinColumn(referencedColumnName = "id", nullable = false)}, inverseJoinColumns = {
@JoinColumn(referencedColumnName = "id", nullable = false)})
@Fetch(FetchMode.SELECT)
private List<RandomValue> hiddenValues;
public Entity()
{
}
public List<RandomValue> getValues()
{
return values;
}
public void setValues(List<RandomValue> values)
{
this.values = values;
}
public List<RandomValue> getHiddenValues()
{
return values;
}
public void setHiddenValues(List<RandomValue> hiddenValues)
{
this.hiddenValues = hiddenValues;
}
}
和实体:
CREATE TABLE `random_value`
(
`id` INT NOT NULL AUTO_INCREMENT,
`random_value` VARCHAR(127) NOT NULL UNIQUE,
PRIMARY KEY (`id`)
);
我还有四个表:
一个代表价值:
CREATE TABLE `entity`
(
`id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
);
一个代表实体:
CREATE TABLE `entity_value_list`
(
`entity_id` INT NOT NULL,
`values_id` INT NOT NULL,
PRIMARY KEY (`entity_id`, `values_id`),
CONSTRAINT `entity_id`
FOREIGN KEY (`entity_id`)
REFERENCES `entity` (`id`),
CONSTRAINT `values_id`
FOREIGN KEY (`values_id`)
REFERENCES `random_value` (`id`)
);
CREATE TABLE `hidden_entity_value_list`
(
`entity_id` INT NOT NULL,
`values_id` INT NOT NULL,
PRIMARY KEY (`entity_id`, `values_id`),
CONSTRAINT `entity_id`
FOREIGN KEY (`entity_id`)
REFERENCES `entity` (`id`),
CONSTRAINT `values_id`
FOREIGN KEY (`values_id`)
REFERENCES `random_value` (`id`)
);
两个表之间有多对多的关系
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "ENTITY_ID" already exists; SQL statement:
CREATE TABLE `hidden_entity_value_list`
(
`entity_id` INT NOT NULL,
`values_id` INT NOT NULL,
PRIMARY KEY (`entity_id`, `values_id`),
CONSTRAINT `entity_id`
FOREIGN KEY (`entity_id`)
REFERENCES `entity` (`id`),
CONSTRAINT `values_id`
FOREIGN KEY (`values_id`)
REFERENCES `random_value` (`id`)
); [90045-200]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) ~[h2-1.4.200.jar:1.4.200]
当我尝试运行使用在运行时创建的hibernate和h2数据库的spring boot项目时,出现错误提示。
hidden_entity_value_list
据我了解,因为entity_value_list
中的字段看起来像cf7_response.php
中的字段,它在抱怨。我该如何解决并使整个工作正常进行?
答案 0 :(得分:1)
约束名称必须在整个架构范围内都是唯一的。
两个表中都有CONSTRAINT名称entity_id
。因此,只需重命名两者中的一个即可。