I have the roles
field in User
entity:
JavaScript
x
@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
JavaScript
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:
JavaScript
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;
}