I have the roles
field in User
entity:
@Entity @Table(indexes = { @Index(columnList = "uuid") }) public class User ... @ElementCollection(fetch = FetchType.EAGER) @Enumerated(EnumType.STRING) @NotEmpty private Set<Roles> roles;
when I try to delete user with a query, the referential integrity constraint violation occurs, because user is referenced from User_roles
table.
How to solve this in any way?
DDL
for related table shows
create or replace table User_roles ( User_id bigint not null, roles varchar(255) null, constraint FKi81fp6mx433heb7dvbxqaqvpv foreign key (User_id) references User (id) );
i.e. it doesn’t contain ON DELETE CASCADE
clause. I need it be there.
Advertisement
Answer
You can add ON DELETE CASCADE
clause to the FOREIGN KEY
constraint in the following way:
import javax.persistence.ForeignKey; @Entity @Table(name ="User") public class User { @ElementCollection @CollectionTable( name = "User_roles", joinColumns = @JoinColumn(name = "User_id"), foreignKey = @ForeignKey( name = "user_fk", foreignKeyDefinition = "FOREIGN KEY (User_id) REFERENCES User(id) ON DELETE CASCADE") ) @Enumerated(EnumType.STRING) private Set<Roles> roles; }