Как настроить сопоставление oneToMany в User -Role-Permission - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть приложение весенней загрузки (Spring boot 2) с данными о Spring jpa.i у меня есть 3 таблицы MYSQL для хранения информации о пользователях, ролях и разрешениях

  • Пользователь будет содержать основные данные пользователя, такие как имя пользователя, пароль, имя, фамилия.
  • Роли представляют роли пользователя, такие как администратор, пользователь, персонал, тест (пользователь может иметь много ролей)
  • Разрешение имеет 3 возможности: чтение, запись, настройка (каждая роль имеет много разрешений)
  • UserRole - объединенная таблица для пользователя и ролей
  • RolePermission - объединенная таблица для ролей и разрешений

Ищу службу загрузки Spring, которая будет возвращать false, если пользователь не проверен по таблице User, если пользователь подтвержден успешно, тогда ответ должен содержать роли и разрешения пользователя.

Мне удалось создать пример службы отдыха, но не удалось настроить ниже

  1. Как настроить классы сущностей для отображения oneToMany в этом требовании
  2. Каким будет соответствующий запрос в интерфейсе репозитория

Пожалуйста, смотрите таблицы сущностей

@Entity
@Table( name = "TURBINE_USER" )
public class PortalUser {

public PortalUser() {

}

public PortalUser(long userID ,String userName , String password , String firstName, String lastName, String email) {
    this.userID = userID;
    this.userName = userName;
    this.password = password;
    this.firstName = firstName;
    this.lastName = lastName;
    this.email =  email;
}


@Id
@Column(name="USER_ID",unique=true)
private long userID;

@NotNull
@Column(name="LOGIN_NAME",unique=true)
private String userName;

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

@NotNull
@ColumnDefault("")
@Column(name="FIRST_NAME")
private String firstName;

@NotNull
@ColumnDefault("")
@Column(name="LAST_NAME")
private String lastName;

@Column(name="EMAIL")
private String email;

@Column(name="CONFIRM_VALUE")
private String confirmValue;

@NotNull

@Column(name="CREATED")
private Timestamp createdDt;

@NotNull

@Column(name="MODIFIED")
private Timestamp modified;

@NotNull
@Column(name="LAST_LOGIN")
private Timestamp lastLogin;

@Column(name="DISABLED")
private char disabled;

@Column(name="OBJECTDATA")
private byte[]  objectData;

@NotNull
@Column(name="PASSWORD_CHANGED")
private Timestamp passwordChanged;
 // getters and setters
}


@Entity
@Table(name =  "TURBINE_ROLE")
public class Role {
    @Id
    @Column(name=  "ROLE_ID",unique  = true)
    private long roleId;

    @Column(name= "ROLE_NAME")
    private String roleName;

}


@Entity
@Table(name ="TURBINE_PERMISSION")
public class Permission {

    @Id
    @Column(name=  "PERMISSION_ID")
    private long permissionId;

    @Column(name= "PERMISSION_NAME")
    private String name;
}

@Entity
@Table(name= "TURBINE_USER_GROUP_ROLE")
public class UserRoles {

    @Column(name="USER_ID")
    private PortalUser user;

    @Column(name="ROLE_ID")
    private Role roles;
}


@Entity
@Table(name="TURBINE_ROLE_PERMISSION")
public class RolePermission {

    @Column(name= "ROLE_ID")
    private Role roleId;

    @Column(name= "PERMISSIONID")
    private Permission permissionId;
}

1 Ответ

0 голосов
/ 07 сентября 2018

Это отношения ManyToMany между пользователем и сущностями Role, Role и Permission. Не следует определять таблицы Join как сущности, и они создаются / управляются реализацией JPA.

Например, аннотация ManyToMany для сущностей пользователя и роли:

public class PortalUser {
    ...

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "User_Role",
        joinColumns = {@JoinColumn(name = "user_id")},
        inverseJoinColumns = {@JoinColumn(name = "role_id")})
    private Set<Role> roles;
}

Протестировано с CMobileCom JPA .

Отказ от ответственности: я являюсь разработчиком CMobileCom JPA , облегченной реализации JPA для Java и Android.

...