【问题标题】:How to model a three-way relationship in a JPA Spring Boot micro service with a MySQL back end如何在带有 MySQL 后端的 JPA Spring Boot 微服务中建模三向关系
【发布时间】:2019-10-23 03:28:31
【问题描述】:

我创建了一个带有 MySQL 后端的 Spring Boot JPA 微服务。我的模型中有两个简单的实体,用户和技能。这些用于代表我组织内的技能基础。每个用户可能有很多技能,所以我使用了一对多连接来对此进行建模,并且可以成功地将技能分配给用户。在我的数据库中,我可以看到 JPA 创建了一个 users_skills 表来实现这一点。

但是,我现在正在苦苦挣扎,因为对于用户拥有的每项技能,都需要指定经验级别(例如基本、高级、专家),而我不确定如何实现这一点。我不确定“级别”是否应该只是技能实体中的枚举类型,或者它本身应该是一个单独的实体?我可以配置 JPA 以便它生成一个代表这种三向关系的 users_skills_levels 表吗?任何建议都将受到欢迎!

这些是我的实体类:-

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private String email;

    @OneToMany(
            cascade = CascadeType.ALL,
            orphanRemoval = true
    )
    private Set<Skill> skills = new HashSet<>();

    getters and setters
}
@Entity
@Table(name = "skills")
public class Skill {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Integer id;

    private String name;

    getters and setters
}

【问题讨论】:

    标签: java mysql spring-boot jpa join


    【解决方案1】:

    这不可能是你试图达到的目标。

    您应该为 users_skills_levels 创建一个实体。例如。 UserSkillLevel 该实体将与 User 建立 ManyToOne 关系,与 Skills 建立 ManyToOne 关系以及属性级别。

    User 拥有一组 UserSkillLevel 和 Skill 实体。

    请在此处找到更深入的示例:

    https://thoughts-on-java.org/many-relationships-additional-properties/

    【讨论】:

    • 正是我需要西蒙的那种方向。这个例子很棒。
    • 太棒了。我很乐意提供帮助。请接受我的回答作为正确答案。谢谢!
    • 完成!从那以后,我重新阅读了这篇文章-连同您的回答,它为我提供了所需的一切。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2019-01-03
    • 2021-04-09
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多