【问题标题】:How can I use many time relationship one to many?我如何使用一对多的时间关系?
【发布时间】:2019-11-19 10:22:08
【问题描述】:

我正在使用与 MySQL 数据库连接的 JPA 和 Hibernate 创建 API。我有保存在数据库中的对象“锻炼”和对象“训练”。练习很简单,有名称、id、级别等,但训练有 id、name 和 listOfExercises。将其保存在数据库中的最佳方法是使用一对多关系,对吗?但是,当我创建训练并将其与例如“俯卧撑”和“小队”连接时,接下来我创建了与相同练习相关的第二次训练 - 所有者被补充了。如何创建培训并将练习与培训联系起来而无需替换?

训练模型(constructors, getter and setter当然也是):

@Entity
@Table(name = "Training")
public class Training {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "training_id")
    private Long trainingId;

    @OneToMany
    @JoinColumn(name = "training_id")
    private List<Exercise> exerciseList;

    @Column(name = "sets")
    @NotNull
    private int sets;

    @Column(name = "user_id")
    private Long userId;

    @Column(name = "training_name")
    @NotNull
    private String trainingName;

    @Column(name = "breaks")
    @NotNull
    private int breaksBetweenExercises;

    @Column(name = "level")
    @NotNull
    private int level;

练习模型:

@Entity
@Table(name = "Exercise")
public class Exercise {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "exercise_id")
    private int id;

    @Column(name = "exercise_name")
    @NotNull
    private String exerciseName;

    @Column(name = "exercise_level")
    @NotNull
    private int level;

    @Column(name = "exercise_info")
    @NotNull
    private String info;

    @Column(name = "img_path")
    @NotNull
    private String imgPath;

    @Column(name = "reps")
    private int reps;

通过这种方式我正在添加培训:

        trainingRepository.save(new Training(exerciseRepository.findAll(),"Full Body Workout",5,1,4));

        List<Exercise> exercises = new ArrayList<>();
        exercises.add(exerciseRepository.findAll().get(2));
        exercises.add(exerciseRepository.findAll().get(1));
        trainingRepository.save(new Training(exercises,"Abs",10,2,4));

这看起来像在数据库中(training_id 已替换): img

【问题讨论】:

  • 可能是多对多关系?
  • 你能提供一些代码吗?
  • @Amongalen 我是数据库新手,多对多应该可以吗?我添加了我的模型
  • 这样说,用户参加了培训,培训有很多练习,进一步多个用户可以进行相同的培训。

标签: java mysql hibernate jpa one-to-many


【解决方案1】:

Pawel,在您的情况下,您应该使用多对多关系。如果您不熟悉数据库,您可以简单地想象这样的关系 - 俯卧撑(锻炼)可以是许多训练的一部分,同时训练(例如 HIIT)可以有许多练习。在数据库中,这种关系是通过附加表实现的——比如说 ExcersisesToTrainings 表。在该表中,您将看到一个复合键(两列 - training_id 和 exercise_id)。在示例中,您将在许多具有不同训练 ID 的行中找到“Push_Ups”的 ID(假设 id=1),同时您会在映射到不同锻炼 ID 的许多行中找到 HIIT 训练的 ID .当您使用 ORM 时,会自动为您创建该表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多