2
respostas

Deletar Usuário, linha da tabela de relacionamento e manter linhas tabela de perfil

Quando eu tento deletar algum usuário o JPA não permite ou apaga uma linha da tabela perfil junto.

public abstract class User implements UserDetails
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @Column(unique = true)
    private String login;

    private String password;

    private LocalDate creationDate;
    private Boolean active;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private List<Profile> profiles = new ArrayList<>();


public class Profile implements GrantedAuthority
{
     @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Enumerated(EnumType.STRING)
    private Role role;

2 respostas

Oi Bruno,

Posta aqui o código que está gerando o problema e também o problema que está ocorrendo.

com.microsoft.sqlserver.jdbc.SQLServerException: The DELETE statement conflicted with the REFERENCE constraint "FKsoyrbfa9510yyn3n9as9pfcsx". The conflict occurred in database "eaas_cloud", table "dbo.user_roles", column 'roles_id'.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:265) ~[mssql-jdbc-9.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1662) ~[mssql-jdbc-9.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:615) ~[mssql-jdbc-9.4.1.jre8.jar:na]
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:537) ~[mssql-jdbc-

Notei que esse erro aparece quando tenho mais de um user com mesma role, caso não tenho ele apaga a role (linha da tabela) junto do user, no caso eu queria apagar a linha da tabela user, linha tabela user_profiles(tabela que user_id e profile_id) ainda manter role.