Orm 映射三个表之间的关系,并使用Vaadin+;弹簧靴
尝试学习Vaadin plus SpringBoot关系,并使用此项目作为基础,通过示例查看组件 它有很多实体,但我正在将其调整为更复杂的实体-关系模型,其中:Orm 映射三个表之间的关系,并使用Vaadin+;弹簧靴,orm,spring-boot,vaadin,relationships,Orm,Spring Boot,Vaadin,Relationships,尝试学习Vaadin plus SpringBoot关系,并使用此项目作为基础,通过示例查看组件 它有很多实体,但我正在将其调整为更复杂的实体-关系模型,其中: 角色具有新的关系技能:一对多 技能类型:多对一 将技能链接到角色时,它有一个级别(SkillLevel)。例子: 角色[高级软件开发人员]具有[西班牙语]技能和[流利] 角色[Jr Software Developer]具有[西班牙语]技能和[基础]水平 我的角色是: @Entity @Table(name = "roles") p
- 角色[高级软件开发人员]具有[西班牙语]技能和[流利]
- 角色[Jr Software Developer]具有[西班牙语]技能和[基础]水平
@Entity
@Table(name = "roles")
public class Role implements Serializable {
private static final long serialVersionUID = -586627565466025158L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@NotNull
@Column(unique = true)
private String name;
@ManyToMany(fetch = FetchType.EAGER)
private Set<Right> rights;
//@ManyToMany(fetch = FetchType.EAGER)
//private Set<SkillSkillLevel> skillSkillLevels;
public Role() {
this.rights = new HashSet<Right>();
//this.skillSkillLevels = new HashSet<SkillSkillLevel>();
}
public Role(String name) {
this();
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addRight(Right right) {
rights.add(right);
}
public void addRights(Set<Right> rights) {
this.rights.addAll(rights);
}
public void removeRight(String right) {
rights.remove(right);
}
public Set<Right> getRights() {
return new HashSet<Right>(rights);
}
public boolean hasRight(String name) {
name = name.toLowerCase();
if (name == null) {
return false;
}
for (Right r : rights) {
if (r.getName().equals(name) || r.getName().equals("super_admin")) {
return true;
}
}
return false;
}
public void clearRights() {
this.rights.clear();
}
public String toString() {
return name;
}
@Override
public boolean equals(Object other) {
if (!(other instanceof Role))
return false;
if (this.getId() == null) {
return this == other;
} else {
Role o = (Role) other;
return this.getId().equals(o.getId());
}
}
@Override
public int hashCode() {
return getName().hashCode();
}
技能水平:
@Entity
@Table(name = "skillLevels")
public class SkillLevel implements Serializable, Comparable {
private static final long serialVersionUID = -8126472682725739996L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@NotNull
@Column(unique=true)
private String name;
public String toString() {
return String.format("%s", name);
}
public SkillLevel() {}
public SkillLevel(String name) {
this();
this.name = name;
}
@Override
public boolean equals(Object other) {
if (!(other instanceof SkillLevel))
return false;
if (this.getId() == null) {
return this == other;
} else {
SkillLevel o = (SkillLevel) other;
return this.getId().equals(o.getId());
}
}
@Override
public int hashCode() {
return getName().hashCode();
}
public Integer getId() { return id; }
public void setId(Integer id) {
this.id = id;
}
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
if (o != null && o instanceof SkillLevel) {
SkillLevel other = (SkillLevel)o;
return name.compareTo(other.getName());
}
return 0;
}
}
我应该创建一个名为RoleSkillLevel的新实体来设置表将加入三个ID(role\u skill\u level)还是有更好的方法来创建它
在角色视图中,当创建新的角色技能级别条目时,有什么有用的UI组件可以添加和删除技能+级别行 我会尽可能远离GUI,不让所有的ORM/DB内容进入。用最能代表GUI的数据构建GUI;为您的域模型使用一些CQRS层。对于UI组件,想象一下,作为用户,您希望如何快速完成工作?可以是表格/网格,可以是将组件添加到某个布局中的东西。将其包装到CustomField中,并处理您的UI模型。您将数据库模型、业务模型和视图模型混合在一起。您应该隔离所有与数据库相关的实体,仅用于数据库操作。将业务逻辑与从数据库模型推导出来的新模型放在一起。然后,您应该在业务模型的UI上传递需要查看的数据,并对其进行处理。。尽量使用视图UI中的简单数据结构。您可以仅使用字符串值构建视图(例如,vaadin表或网格)。希望这能指引你!!!
@Entity
@Table(name = "skillLevels")
public class SkillLevel implements Serializable, Comparable {
private static final long serialVersionUID = -8126472682725739996L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@NotNull
@Column(unique=true)
private String name;
public String toString() {
return String.format("%s", name);
}
public SkillLevel() {}
public SkillLevel(String name) {
this();
this.name = name;
}
@Override
public boolean equals(Object other) {
if (!(other instanceof SkillLevel))
return false;
if (this.getId() == null) {
return this == other;
} else {
SkillLevel o = (SkillLevel) other;
return this.getId().equals(o.getId());
}
}
@Override
public int hashCode() {
return getName().hashCode();
}
public Integer getId() { return id; }
public void setId(Integer id) {
this.id = id;
}
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
if (o != null && o instanceof SkillLevel) {
SkillLevel other = (SkillLevel)o;
return name.compareTo(other.getName());
}
return 0;
}
}