ентити наследуются от суперкласса. Исправил связи

pull/2/head
L_DelOff 2023-03-04 21:46:38 +03:00
parent 9eebb2bfff
commit cd695b9cb4
5 changed files with 68 additions and 16 deletions

View File

@ -0,0 +1,33 @@
package ru.ldeloff.hedgehogcloud.entity;
import com.sun.istack.NotNull;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.domain.Persistable;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Transient;
import java.util.UUID;
@NoArgsConstructor
@Setter
@MappedSuperclass
@EqualsAndHashCode
public class BaseEntity implements Persistable<String> {
@Id
protected String id = UUID.randomUUID().toString();
@Transient
private Boolean justCreated = false;
@Override
public String getId() {
return null;
}
@Override
public boolean isNew() {
return justCreated;
}
}

View File

@ -6,10 +6,7 @@ import lombok.Setter;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.*;
import java.util.Set;
@NoArgsConstructor
@ -17,13 +14,15 @@ import java.util.Set;
@Setter
@Entity
@Table(name = "roles")
public class RoleEntity implements GrantedAuthority {
@Id
private String id;
public class RoleEntity extends BaseEntity implements GrantedAuthority {
private String name;
@Transient
@ManyToMany
private Set<UserEntity> users;
public String getName() {
return name;
}
@Override
public String getAuthority() {
return getName();

View File

@ -1,14 +1,12 @@
package ru.ldeloff.hedgehogcloud.entity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@NoArgsConstructor
@ -16,15 +14,17 @@ import java.util.Set;
@Setter
@Entity
@Table(name = "users")
public class UserEntity implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
public class UserEntity extends BaseEntity implements UserDetails {
private String username;
private String password;
@ManyToMany(fetch = FetchType.EAGER)
private Set<RoleEntity> roles;
@JoinTable(
name = "users_roles",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "role_id") }
)
private Set<RoleEntity> roles = new HashSet<>();
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {

View File

@ -6,5 +6,6 @@
<include file="scripts/01_create_table_users.sql" relativeToChangelogFile="true"/>
<include file="scripts/02_create_table_roles.sql" relativeToChangelogFile="true"/>
<include file="scripts/03_create_table_users_roles.sql" relativeToChangelogFile="true"/>
</databaseChangeLog>

View File

@ -0,0 +1,19 @@
-- liquibase formatted sql
-- changeset L_DelOff:create_table_users_roles rollbackSplitStatements:true
-- comment: Создание сопоставляющей таблицы пользователь - роли
CREATE TABLE users_roles
(
`user_id` VARCHAR(36) NOT NULL,
`role_id` VARCHAR(36) NOT NULL,
PRIMARY KEY (`user_id`,`role_id`),
KEY `role_id` (`role_id`),
CONSTRAINT `users_roles_ibfk_1`
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
CONSTRAINT `users_roles_ibfk_2`
FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`)
);
-- rollback DROP TABLE users_roles;