一种更新数据库表的有效方法

时间:2014-01-02 14:31:57

标签: mysql sql hibernate hql

我有一个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
}

Student&amp; StudentTeam OneToMany 关系。

Team实体看起来像这样:

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

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

  //Getter & Setter
}

数据库中的team表如下所示:

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

不同的团队实例可以相同 name不同 city

以上事情很好。

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

此客户希望我更新此学生的团队(更新数据库中的student_team表)与其发送的团队。要注意,学生可能有一个团队与同一团队namecity不同。此外,如果这个学生在DB中有其他团队但在请求中没有提到,那么他们应该留在这个学生。

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

1 个答案:

答案 0 :(得分:0)

如果您的要求可以接受,您还可以在地图中使用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

您可以使用以下代码向Team添加新的Student

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

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