gpt4 book ai didi

mysql - 更新数据库表的有效方法

转载 作者:行者123 更新时间:2023-11-30 00:52:03 24 4
gpt4 key购买 nike

我有一个 Student 实体,一个 Team 实体。然后我创建了一个 StudentTeam 实体,其中包含字段“student_id”、“team_id”和“updateTime”。

Student 实体如下所示:

@Entity
@Table(name = "student")
public class Student {

@OneToMany(mappedBy = "student")
private Set<StudentTeam> studentTeams = new HashSet<StudentTeam>();

//Getter & Setter
}

StudentStudentTeam 具有 OneToMany 关系。

Team 实体如下所示:

@Entity
@Table(name = "team")
public class Team {

private int tid;
private String name;
private String city;

//Getter & Setter
}

DB 中的 team 表如下所示:

tid   name   city
___ ______ _____
1 name1 city_A
2 name1 city_B
3 name3 city_C
...

不同的团队实例可以具有相同名称,但不同城市

上面的事情工作正常。

现在,我的客户向我发送了一个请求,其中包括学生 ID、对应城市的团队名称列表。

该客户希望我使用其发送的团队更新该学生的团队(更新数据库中的 student_team 表)。需要注意的是,学生可能拥有一个具有相同团队名称但不同城市的团队。此外,如果该学生在DB还有其他团队但在请求中未提及,则应将其保留在该学生身边。

我正在使用 Servlet + Hibernate。我想知道针对这种情况更新学生团队最有效的 HQL 是什么?

最佳答案

如果您的要求可以接受,您还可以在映射中使用 Map 集合。例如:

@Entity
public class Student {

...

private String name;

@ManyToMany @JoinTable
@MapKeyColumn(name="city")
private Map<String, Team> mapTeam;

...

}

@Entity
public class Team {

...

String name

...
}

上面的映射需要三个表:studentteamstudent_team

您可以使用如下代码将新的团队添加到学生:

student.getMapTeam().put('City_A', team1);
student.getMapTeam().put('City_B', team1);
student.getMapTeam().put('City_C', team2);

您只需查询 Student 实体。然后,您可以通过调用getMapTeam()检索所有Team及其关联城市。

关于mysql - 更新数据库表的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20885180/

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