有一名班级顾问。顾问可以有许多经验,例如受薪,自雇,自由职业者。对于每种类型的体验,都有不同的数据要保存在数据库中。
总经验
公司名称
几年的体验时间
录取通知书链接
公司名称
总体经验
CIN_Number
GST_Number
CompanyCertificateLinkUrl
总经验
用户可以具有多种职业类型的经验,例如顾问既是受薪又是自由职业者,或者是自雇人士加上受薪和自由职业者。所以我很困惑如何为这种用例制作@Entity类。
我的解决方案
@Entity
class Consultant{
@Id
int id;
@OneToOne
Salaried semp;
@OneToOne
SelfEmployed selfemp;
@OneToOne
Freelancer femp;
}
但是我认为这不是一个好习惯,因为它会导致数据库中出现许多空字段。
答案 0 :(得分:0)
您可以使用两个类 consultant
和 profession
(id,名称)以及关系OneToMany
,{{ 1}}
顾问的实体
ManyToOne
专业的实体
@Entity
class Consultant{
@Id
private int id;
@OneToMany(mappedBy = "consultant",cascade = CascadeType.All)
List<ConsultantProfession> cp;
}
顾问职业的实体
@Entity
class Profession{
@Id
private int id;
private String name;
@OneToMany(mappedBy = "profession", cascade = CascadeType.All)
private List<ConsultantProfession> cp;
}
答案 1 :(得分:0)
我认为您的方法很好。 @OneToOne
字段在默认情况下是可选的,因此可以为null。这意味着相应的表中将没有行,因此,顾问表中每行最多只有两个空值。
如果您真的很担心数据库中的null,那么可以用另一种方式映射关系,所以:
@Entity
class Consultant{
@Id
int id;
@OneToOne(mappedBy = "consultant")
Salaried semp;
@OneToOne(mappedBy = "consultant")
SelfEmployed selfemp;
@OneToOne(mappedBy = "consultant")
Freelancer femp;
}
这样,如果Salaried表中没有与顾问相关的行,则semp
对象中的Consultant
字段将为空。