gpt4 book ai didi

java - Hibernate 从一对多连接中获取一列

转载 作者:行者123 更新时间:2023-11-30 10:58:38 24 4
gpt4 key购买 nike

我想创建一个仅包含来自 OneToMany ManyToOne 等的 1 列的 java 类。类型连接而不是整行。

我该怎么做?

(我不确定我是否可以表达自己所以我举了一个例子)

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 表,我想避免这种情况,因为我只需要其中的 1 列。

最佳答案

如果我对你的问题理解正确的话,你不能因为副技能(因为是合集)而做你想做的事。您只能使用 @SecondaryTable annotation 映射主要技能名称。 .

当您使用 ORM 映射事物时,没有在这种情况下我只想要一列,因为您正在映射对象,并且通常在您的对象中您不想复制数据(除非它们在您的域模型之外)。如果这对您来说是 Not Acceptable ,我建议您看看其他工具,例如 myBtais,它可以让您完全控制您返回的数据。

所以底线是,将您的技能映射为一个实体并接受它,即使它有很多列,或者选择不同的工具(但不是 ORM)。

关于java - Hibernate 从一对多连接中获取一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32166027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com