我想创建一个java类,它只包含一个来自OneToMany ManyToOne等列的列,而不是整行。
我该怎么做?
(我不确定我能表达自己,所以我做了一个例子)
TABLE e_skill
(
id int NOT NULL AUTO_INCREMENT,
skill_name VARCHAR (20) NOT NULL,
PRIMARY KEY (id)
);
TABLE t_person
(
id int NOT NULL AUTO_INCREMENT,
user_id int NOT NULL,
primary_skill int,
PRIMARY KEY (id),
FOREIGN KEY (primary_skill) REFERENCES e_skill(id)
);
TABLE t_secondaryskills
(
id int NOT NULL AUTO_INCREMENT,
t_person_id int NOT NULL,
skill_name int NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (t_person_id) REFERENCES t_person(id),
FOREIGN KEY (skill_name) REFERENCES e_skill(id)
);
public enum Skill {
...
}
@Entity
@Table(name = "t_person")
public class Employee {
@Id
@GeneratedValue
private Integer id;
@ManyToOne
@Enumerated(EnumType.STRING)
//????????
//get skill_name column from e_skill
//????????
private Skill primarySkill;
@OneToMany
@Enumerated(EnumType.STRING)
//????????
//get skill_name column from e_skill
//????????
private Set<Skill> secondarySkills;
//getters setters
}
我现在唯一可以做的就是创建一个实体来代表e_skill表,我想避免这样做,因为我只需要一列。
答案 0 :(得分:1)
如果我理解你的问题,由于辅助技能(因为它是一个集合),你不能做你想做的事。您只能使用@SecondaryTable
annotation来映射主要技能名称。
当您使用ORM映射内容时,我只想在此场景中使用列,因为您正在映射对象,并且通常在您的对象中#39;想要复制数据(除非它们在您的域模型之外)。如果这对你来说是不可接受的,我建议你看一下像myBtais这样的其他工具,它可以让你完全控制你得到的数据。
如此底线,将您的技能映射为实体,即使它有很多列,也可以选择其他工具(但不是ORM)。