Java Spring数据JPA从多对多关系删除问题
在我的项目中,我使用Spring数据jpa。我有多对多关系的表格。我的实体:Java Spring数据JPA从多对多关系删除问题,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,在我的项目中,我使用Spring数据jpa。我有多对多关系的表格。我的实体: @Entity @Table(name = "SPEC") public class SpecJpa { @Id private int id; @Column(name = "NAME") private String name; @OneToOne(cascade = CascadeType.ALL, fetch
@Entity
@Table(name = "SPEC")
public class SpecJpa {
@Id
private int id;
@Column(name = "NAME")
private String name;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "Creator_ID", unique = false, nullable = false, updatable = true)
private UsersJpa usersJpa;
@Column(name = "DESCRIPTION")
private String description;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name="SPEC_PARTS",
joinColumns = @JoinColumn(name="ID_PARTS", referencedColumnName="id"),
inverseJoinColumns = @JoinColumn(name="ID_SPEC", referencedColumnName="id")
)
private Set<PartsJpa> partsJpa;
//---------------
但我有一个例外:
差异完整性约束冲突:
“FK9Y4MKICYBLJWPENACP4298I49:PUBLIC.PARTS外键(ID_导出)
参考公共出口(ID)(1)”;SQL语句:/*删除
com.aleksandr0412.demo.entitiesjpa.ExportJpa/delete from EXPORT
其中id=?[23503-200]],SQL:/delete
com.aleksandr0412.demo.entitiesjpa.ExportJpa*/delete from EXPORT
其中id=?2020-05-2519:16:31.13387---[nio-8080-exec-4]
o、 h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:23503,SQLState:
23503
在这个实体的数据库中,我有3个表:零件、等级库和等级库零件。据我所知,要解决这个问题,我首先应该删除表spec_parts中的行,然后可以从表parts中删除行。如何执行此操作?在您的
零件服务
实现中,我建议您首先使用控制器中给定的id
获取要删除的(即零件JPA)
。
接下来将其specJpa设置为null
或emptySet
,然后调用delete方法
为此,请确保方法setSpecJpa(SpecJpa SpecJpa)
和setPartJpa(PartJpa PartJpa)
正确实现
我希望这对你有帮助
@Entity
@Table(name = "PARTS")
public class PartsJpa {
@Id
private int id;
@Column(name = "NAME")
private String name;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ID_EXPORT", unique = false, nullable = false, updatable = true)
private ExportJpa exportJpa;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ID_TYPE", unique = false, nullable = false, updatable = true)
private TypesJpa typesJpa;
@Column(name = "DESCRIPTION")
private String description;
@ManyToMany(fetch = FetchType.EAGER)
private Set<SpecJpa> specJpa;
@PostMapping("deletePart")
public String deletePart(@RequestParam String id, Model model) {
partsService.deleteById(Integer.parseInt(id));
return "redirect:/parts";
}