【问题标题】:An efficient way to update the database table更新数据库表的有效方法
【发布时间】:2014-01-02 14:31:57
【问题描述】:

我有一个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 & StudentTeam 具有 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
...

不同的团队实例可能有相同 name不同 city

以上工作正常。

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

这个客户希望我用它发送的团队更新这个学生的团队(更新 DB 中的 student_team 表)。需要注意的是,学生可能有一个团队与同一团队 name 但不同 city。此外,如果该学生在 DB 中有其他团队但请求中未提及,则应与该学生保持联系。

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

【问题讨论】:

  • 没有group 实体。保留字很麻烦。
  • 谢谢,更新了我的帖子。
  • 好。现在考虑提供适当的 DDL 和/或 sqlfiddle 以及所需的结果集

标签: mysql sql hibernate hql


【解决方案1】:

如果您的要求可以接受,您也可以在映射中使用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 实体。然后,您可以通过调用getMapTeam() 检索所有Team 及其关联城市。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多