Jpa 具有继承的多个主机上的外键冲突
我目前正在构建以下场景: 我有一个包含参数列表的操作。这些也可能发生在其他行为中,所以我有很多关系。 参数是一个抽象类,一个实现是TextParameter。 现在我有了以下代码:Jpa 具有继承的多个主机上的外键冲突,jpa,inheritance,many-to-many,quarkus,sqlexception,Jpa,Inheritance,Many To Many,Quarkus,Sqlexception,我目前正在构建以下场景: 我有一个包含参数列表的操作。这些也可能发生在其他行为中,所以我有很多关系。 参数是一个抽象类,一个实现是TextParameter。 现在我有了以下代码: @Data @Entity public class Action { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToMany(cascade = CascadeType.ALL,
@Data
@Entity
public class Action {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(
name = "Action2ParameterMapping",
joinColumns = @JoinColumn(name = "actionId"),
inverseJoinColumns = @JoinColumn(name = "parameterId"))
private List<Parameter> parameters;
}
和文本参数:
@Data
@Entity
@PrimaryKeyJoinColumn(name = "parameterId")
public class TextParameter extends Parameter {
...
}
我现在创建了如下表(我不想生成,因为我们使用Flyway迁移):
我使用Quarkus,并有简单的泛型存储库
@ApplicationScoped
public class ActionRepository implements PanacheRepository<Action> {
}
@ApplicationScoped
公共类ActionRepository实现PanacherRepository{
}
因此,现在,当我创建一个包含参数对象的Action对象并使用actionRepository.persist(Action)
将其持久化时,我得到了一个SQLServerExceptionINSERT语句,它与外键约束“FK\uuuuuuuuuAction2PA\uuuuuuuuu42d080”冲突,我不明白为什么
我知道它试图告诉我,它想在MappingTable中保留一个条目,但actionId不属于任何操作,但这怎么可能呢?
我不明白,为什么这不起作用。在这个问题出现3天多之后,我几乎在问了这个问题之后就解决了
问题出在DB测试套件中。
@AfterEach
方法试图删除参数,这违反了约束
CREATE TABLE Action
(
id BIGINT NOT NULL PRIMARY KEY IDENTITY
)
CREATE TABLE Parameter
(
id BIGINT NOT NULL PRIMARY KEY IDENTITY
)
CREATE TABLE TextParameter
(
parameterId BIGINT NOT NULL FOREIGN KEY REFERENCES Parameter (id)
)
-- Many-To-Many MappingTable
CREATE TABLE Action2ParameterMapping
(
actionId BIGINT NOT NULL FOREIGN KEY REFERENCES Action (id),
parameterId BIGINT NOT NULL FOREIGN KEY REFERENCES Parameter (id),
PRIMARY KEY (actionId, parameterId)
)
@ApplicationScoped
public class ActionRepository implements PanacheRepository<Action> {
}