如何将一组 java 对象表示为数据库中其他对象的字段?

Posted

技术标签:

【中文标题】如何将一组 java 对象表示为数据库中其他对象的字段?【英文标题】:How to represent set of java objects as a field of other object in database? 【发布时间】:2019-12-20 06:37:07 【问题描述】:

我有一个班级练习和培训。我想在每次训练中都有一套练习。我的问题是 - 如何在数据库和 java 中表示它?

我的想法是根据training_idexercise 表中的外键)在特定训练中添加一个练习。 但是我想将一个训练中的每个练习存储在一个集合中,或者只是列出训练类的一个字段 - 我认为这是这样做的好方法,但我可能错了。

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

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

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

    @Column(name = "weight")
    private double weight;

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

    @Column(name = "training_id")
    private int trainingId;
@Table(name = "training")
public class Training 

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

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

    @Column(name = "date")
    private Date date;

    private Set<Exercise> exercises;

也许我不明白它的概念。有人可以告诉我一个正确的方法吗?

【问题讨论】:

您用jdbc 标记了您的问题。但是您的代码显示了 JPA 实体。那么,您使用的是 JDBC 还是 JPA? 我的错,对不起——当然是 JPA 那你需要学习一下。这是一个复杂的野兽。阅读一本关于它的好书,和/或 Hibernate 文档。它有一个关于实体之间关联的完整部分,这是 JPA 的基本基本构建块。 docs.jboss.org/hibernate/orm/current/userguide/html_single/… 【参考方案1】:

试试这个:

@Table(name = "training")
public class Training 

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

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

    @Column(name = "date")
    private Date date;

    @OneToMany(mappedBy = "training")
    private Set<Exercise> exercises = new HashSet<>();


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

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

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

    @Column(name = "weight")
    private double weight;

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

    @Column(name = "training_id")
    private int trainingId;

    @ManyToOne
    @JsonIgnoreProperties("exercises")
    private Training training;

这将是由外键引用的 2 个独立数据库。

编辑:这将是由外键引用的 2 个单独的 (不是数据库)。

【讨论】:

以上是关于如何将一组 java 对象表示为数据库中其他对象的字段?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以一次性将一组对象插入 DynamoDB - Java

java怎样将一组对象传入Oracle存储过程

如何仅通过一次调用将一组对象保存到猫鼬数据库?

是否可以一次性将一组对象插入DynamoDB-Java

如何通过一次调用将一组对象推送到猫鼬中的数组中?

如何通过一次调用将一组对象推送到猫鼬中的数组中?