java - 与不同实体的单向@OneToOne 关系
问题描述
我有一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;
}
}
对可能用于 aStudent
或 a的用户帐户进行建模Teacher
。他们只能拥有一个帐户,因此要指定这种关系,我想通过@OneToOne 关系对其进行建模,但我无法理解将其设为单向是否是个好主意。
此外,User
该类可以同时引用 aStudent
和 a Teacher
by 逻辑,如果我需要从其User
帐户开始检索用户的详细信息怎么办?根据我的理解,我应该创建一个双向关系,但是,我需要在User
类中放置哪个实体?
解决方案
您可以使用枚举:
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;
}
}
推荐阅读
- gnuplot - mac OS 的交互式终端
- python - 如何从 Path 切换到 os.path ,反之亦然?
- html - 十一:在头部的noscript标签中渲染一个样式
- java - 如何使用反射或库从超类中获取子类的私有字段的名称?
- matlab - 为声音添加噪音
- time - 如何在 SAS 中格式化时间
- oracle - 在 Oracle 中更新行时,Debezium 连接器主要发送零
- angular - 使用 Web Worker 执行 tensorflowjs 的 model.predict - Angular 11
- swift - 如何检查句子的语法或句法是否正确(Swift 中的简单语法检查)?
- python - TypeError:'int'对象不可迭代,同时迭代二维数组