我想我想要一对一的关系,但是我的dB技能并不是最好的。我所有的spring安全逻辑都有一个用户类。我的用户可以是管理员或查看者。
我最初的想法是拥有一个Profile超类,然后拥有一个扩展Profile的Admin和Viewer类。
然后我可以给用户一个配置文件参数。但是我所有的尝试都失败了。。。
我认为我的策略是错误的。
我能够完成以下工作 包com.legge.worksiteWebCams.models.profile
导入com.legge.worksiteWebCams.models.abstract.RestModel 导入javax.persistence。*
超类:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
abstract class Profile : RestModel() {
private val name: String? = null
}
查看器
@Entity
@PrimaryKeyJoinColumn(name = "viewer_id")
class Viewer : Profile() {
//Viewer logic here
}
查看器
@Entity
@PrimaryKeyJoinColumn(name = "admin_id")
class Admin : Profile() {
//Admin logic here
}
然后我就可以引用它了 用户
@Entity
@Table(name = "sec_user", uniqueConstraints = [(UniqueConstraint(columnNames = arrayOf("username"))), (UniqueConstraint(columnNames = arrayOf("email")))])
data class User(
@OneToOne(fetch = FetchType.EAGER, cascade = [(CascadeType.ALL)])
var profile: Profile? = null,
){}
答案 0 :(得分:1)
我认为您应该使用@OneToMany关系,因为用户可能有很多角色 就像管理员和查看器一样。 这是第一种方法。
在User.java类中
@OneToMany
List<Role> rol = new ArrayList<>().
2)执行@ManyToMany映射,因为一个用户有多个角色,而一个角色属于许多用户。
User.java类。
@ManyToMany(
fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
@JoinTable(
name = "UserRole",
joinColumns = @JoinColumn(
name = "accountId",
referencedColumnName = "id") ,
inverseJoinColumns = @JoinColumn(
name = "roleId",
referencedColumnName = "id") )
private Set<Role> roles;