gpt4 book ai didi

java - 我如何使用一对多的多次关系?

转载 作者:行者123 更新时间:2023-11-30 21:26:11 28 4
gpt4 key购买 nike

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

训练模型(constructors, getters and setters当然也是):

@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

最佳答案

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

关于java - 我如何使用一对多的多次关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58931705/

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