Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 具有继承的多个主机上的外键冲突_Jpa_Inheritance_Many To Many_Quarkus_Sqlexception - Fatal编程技术网

Jpa 具有继承的多个主机上的外键冲突

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,

我目前正在构建以下场景: 我有一个包含参数列表的操作。这些也可能发生在其他行为中,所以我有很多关系。 参数是一个抽象类,一个实现是TextParameter。 现在我有了以下代码:

@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)
将其持久化时,我得到了一个SQLServerException
INSERT语句,它与外键约束“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> {
}