2017-08-21 1 views
0

J'essaie de charger les rôles de l'utilisateur avec l'entité User via @ManyToMany pour l'authentification, mais j'obtiens une exception.Comment faire pour sélectionner sélectionner pour @ManyToMany charger via spring-data?

ERROR: column user0_.role_id does not exist 

Je viens de commencer à apprendre les données de printemps. S'il vous plaît aidez-moi à résoudre ce problème. Je vous remercie.

entité utilisateur:

@Entity(name = "users") 
public class User implements UserDetails { 

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

    @Column(name = "username") 
    private String username; 

    @Column(name = "password") 
    private String password; 

    @Column(name = "role_id") 
    private int roleId; 

    @ManyToMany(fetch = FetchType.EAGER) 
    @JoinTable(name = "user_id_role_id" 
      , 
      joinColumns = { 
        @JoinColumn(name = "user_id", 
          nullable = false, 
          updatable = false) 
      }, 
      inverseJoinColumns = { 
        @JoinColumn(name = "role_id", 
          nullable = false, 
          updatable = false) 
      } 
    ) 
    private List<Role> authorities; 

    @Column(name = "account_non_expired") 
    private boolean accountNonExpired; 

    @Column(name = "account_non_locked") 
    private boolean accountNonLocked; 

    @Column(name = "credentials_non_expired") 
    private boolean credentialsNonExpired; 

    @Column(name = "enabled") 
    private boolean enabled; 
... 

Et entité Rôle:

@Entity(name = "user_role") 
public class Role implements GrantedAuthority { 

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

    @Column(name = "role") 
    private String role; 
... 

Mon schéma PostgreSQL:

CREATE TABLE IF NOT EXISTS user_role (
    id SERIAL PRIMARY KEY, 
    role VARCHAR(10) NOT NULL 
); 

CREATE TABLE IF NOT EXISTS users (
    id      SERIAL PRIMARY KEY, 
    username    VARCHAR(20) UNIQUE NOT NULL, 
    password    VARCHAR(20) UNIQUE NOT NULL, 
    account_non_expired  BOOLEAN   NOT NULL DEFAULT TRUE, 
    account_non_locked  BOOLEAN   NOT NULL DEFAULT TRUE, 
    credentials_non_expired BOOLEAN   NOT NULL DEFAULT TRUE, 
    enabled     BOOLEAN   NOT NULL DEFAULT TRUE 
); 

CREATE TABLE user_id_role_id (
    id  SERIAL PRIMARY KEY, 
    user_id INTEGER NOT NULL, 
    role_id INTEGER NOT NULL, 
    FOREIGN KEY (role_id) REFERENCES user_role (id), 
    FOREIGN KEY (user_id) REFERENCES users (id) 
); 

Répondre

2

erreur indique que vous ne possédez pas la propriété role_id dans l'utilisateur de table. Vous avez cette propriété dans l'entité:

@Column(name = "role_id") 
private int roleId; 

mais lorsque vous créez la table:

CREATE TABLE IF NOT EXISTS users (
    id      SERIAL PRIMARY KEY, 
    username    VARCHAR(20) UNIQUE NOT NULL, 
    password    VARCHAR(20) UNIQUE NOT NULL, 
    account_non_expired  BOOLEAN   NOT NULL DEFAULT TRUE, 
    account_non_locked  BOOLEAN   NOT NULL DEFAULT TRUE, 
    credentials_non_expired BOOLEAN   NOT NULL DEFAULT TRUE, 
    enabled     BOOLEAN   NOT NULL DEFAULT TRUE 
); 

vous n'avez pas la propriété role_id.

Il suffit de retirer RoleId propriété de l'entité utilisateur et il devrait fonctionner :)

+0

ressemble à mon cerveau un peu surchargé. Je vous remercie! C'est la meilleure réponse :) – Pavel