Однонаправленная связь @OneToOne с разными объектами - PullRequest
0 голосов
/ 09 мая 2020

У меня есть класс User:

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements UserDetails {
    @Id
    @GeneratedValue
    Long id;

    @NotBlank
    private String name;
    @NotBlank
    private String password;

    private List<String> roles = new ArrayList<>();


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return this.roles.stream().map(SimpleGrantedAuthority::new).collect(toList());
    }

    @Override
    public String getUsername() {
        return null;
    }

    @Override
    public boolean isAccountNonExpired() {
        return false;
    }

    @Override
    public boolean isAccountNonLocked() {
        return false;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }

    @Override
    public boolean isEnabled() {
        return false;
    }
}

, который моделирует учетную запись пользователя, которая может быть для Student или Teacher. Они могут владеть только одной учетной записью, поэтому, чтобы указать эту связь, я решил смоделировать ее с помощью отношения @OneToOne, но мне трудно понять, было бы хорошей идеей сделать это однонаправленным.

Кроме того, * Класс 1009 * может относиться как к Student, так и к Teacher по logi c, что, если мне нужно получить данные пользователя, начиная с его учетной записи User? Насколько я понимаю, я должен создать двунаправленную связь, но какую сущность мне нужно поместить в класс User?

1 Ответ

0 голосов
/ 09 мая 2020

Вы можете использовать перечисление:

public enum UserType {
    STUDENT("Student"),
    TEACHER("Teacher");


    private final String displayValue;

    UserType(String displayValue) {
        this.displayValue = displayValue;
    }
    public String getDisplayValue() {
        return displayValue;
    }
}

И в вашей пользовательской сущности:

@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements UserDetails {
    @Id
    @GeneratedValue
    Long id;

    @NotBlank
    private String name;
    @NotBlank
    private String password;

    private List<String> roles = new ArrayList<>();

    @Enumerated(EnumType.STRING)
    private UserType userType;


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return this.roles.stream().map(SimpleGrantedAuthority::new).collect(toList());
    }

    @Override
    public String getUsername() {
        return null;
    }

    @Override
    public boolean isAccountNonExpired() {
        return false;
    }

    @Override
    public boolean isAccountNonLocked() {
        return false;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return false;
    }

    @Override
    public boolean isEnabled() {
        return false;
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...