【发布时间】:2021-10-19 04:53:45
【问题描述】:
我有一个带有字符串列表的实体(“Saunoja”)。尝试从 H2-console 中删除 Saunoja 时,出现以下错误:
Referential integrity constraint violation: "FKIL684UE3YHG0N80RMHVIFQTA0: PUBLIC.SAUNOJA_ROLES FOREIGN KEY(SAUNOJA_ID) REFERENCES PUBLIC.SAUNOJA(ID) (1)"; SQL statement: DELETE FROM "PUBLIC"."SAUNOJA" WHERE "ID"=? [23503-200]
我在 Saunoja 实体的另一个属性上遇到了同样的问题,但它已通过对之前在此处提出的类似问题的回答得到解决。 因为这个属性是一个由antohter Entity组成的List,并且@OneToMany关系存在问题,所以解决方案是添加一个@OnDelete(action = OnDeleteAction.CASCADE),但在这种情况下它不起作用,因为它不是实际的@OneToMany 关系。
atm 我的实体看起来像这样:
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Saunoja extends AbstractPersistable<Long> implements Comparable<Saunoja> {
private String username;
private String password;
private String firstName;
private String lastName;
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
private List<String> roles;
private LocalDateTime created;
private Long profilepictureId;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "author")
@OnDelete(action = OnDeleteAction.CASCADE)
private List<Photo> photos;
@Override
public int compareTo(Saunoja other) {
return username.compareToIgnoreCase(other.username);
}
}
为持久化角色制作了一个单独的表。该表称为 SAUNOJA_ROLES。可能与字符串列表的注释有关..?
已经尝试过这样(以及各种组合):
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn
private List<String> roles;
【问题讨论】:
标签: spring-boot hibernate h2