JPA如何设计许多表与公共表一对一关系

时间:2019-07-18 07:20:36

标签: spring spring-boot jpa

我能找到解决办法吗?

预订 -键 -什么 -员工编号 -room_ref_key

员工 -键 -东西

房间 -键 -东西

1 个答案:

答案 0 :(得分:0)

对于一对一的预订员工和预订房间的映射对我来说似乎很不合逻辑。

一个房间和员工都应该有一个以上的预订。

我认为,您应该使用多对一映射而不是一对一。

此任务最简单的解决方案是:

  1. 预订类:

    @Entity
    public class Booking {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long bookingId;
        @ManyToOne
        @JoinColumn(name = "employee_id")
        private Employee employee;
        @ManyToOne
        @JoinColumn(name = "room_id")
        private Room room;
    
        // other fields
        // getters and setters
    }
    
  2. Employee类:

    @Entity
    public class Employee {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private long employeeId;
    
        // other fields
        // getters and setters
    }
    
  3. 房间类别:

       @Entity
       public class Room {
           @Id
           @GeneratedValue(strategy = GenerationType.IDENTITY)
           private long roomId;
    
           // other fields
           // getters and setters
       }
    

此代码段中将发生什么:

  1. @Entity告诉Hibernate此类应该是一个表。

  2. ID上方的
  3. @Id @GeneratedValue(strategy = GenerationType.IDENTITY)告诉休眠此字段是表的唯一标识符。

  4. @ManyToOne指定两个实体之间的多对一关系。

  5. @JoinColumn指定用于加入实体关联的列。

但是,如果要实现一对一映射,则应使用@OneToOne注释而不是@ManyToOne

我强烈建议您查看休眠参考指南: https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html

希望这对您有用!