MySQL一对多,Java,休眠

时间:2020-07-10 12:13:09

标签: java mysql hibernate

首先...对不起,我的描述...我希望我能说清楚。 我想创建一个有汽车和司机的项目。一辆汽车可以有一名司机,而一名驾驶员可以有多辆汽车。

@Entity
@Table(name = "car")
public class Car {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "carid")
    private int id;
    
    @Column(name = "car_producator")
    private String producator;
    
    @Column(name = "car_model")
    private String model;
    
    @Column(name = "car_culoare")
    private String culoare;
    
    @Column(name = "car_esteInchiriata")
    private boolean esteInchiriata;
    
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name="driver_id")
    private Driver driver;
    
    private int car_soferID;
[...]
}

@Entity
@Table(name = "driver")
public class Driver {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "driver_id")
    private int driver_id;
    
    @Column(name = "driver_name")
    private String name;
    
    @Column(name = "driver_license")
    private String license;
    
    @Column(name = "driver_phonenr")
    private String phoneNr;
    
    @OneToMany(mappedBy = "driver", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    private List<Car> masini;

[...]
}

这是mysql语法,我不太清楚,如果我有一对多的关系,我是否需要第三张表,其中有那辆车的id,carID和driverID?对不起我的假问题

CREATE DATABASE  IF NOT EXISTS `employee_directory`;
USE `employee_directory`;



DROP TABLE IF EXISTS `driver`;

CREATE TABLE `driver` (
  `driver_id` int(11) NOT NULL AUTO_INCREMENT,
  `driver_name` varchar(45) DEFAULT NULL,
  `driver_license` varchar(45) DEFAULT NULL,
  `driver_phonenr` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`driver_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;


INSERT INTO `driver` VALUES 
    (1,'Tora1ie','Andrews','leslie@mail@com'),
    (2,'Tora2','Baumgarten','emma@mail@com'),
    (3,'Tora3i','Gupta','avani@mail@com'),
    (4,'Tora4','Petrov','yuri@mail@com'),
    (5,'Tora5','Vega','juan@mail@com');

create table `car` (
  `carid` int unsigned not null auto_increment,
  `driver_id` int unsigned not null,
  `car_producator` varchar(45) DEFAULT NULL,
  `car_mode` varchar(45) DEFAULT NULL,
  `car_culoare` varchar(45) DEFAULT NULL,
    TINYINT
     `car_esteInchiriata` TINYINT(1) DEFAULT NULL,
  index car_driver_index(`driver_id`),
  foreign key (`driver_id`) references driver(`driver_id`) on delete cascade,
  primary key(`carid`)
);

1 个答案:

答案 0 :(得分:1)

这两种解决方案都将由您完全决定。

对于当前代码,它不会创建第三个表,但是Car表的每一行都会有一个驱动程序值。

但是如果您设置@ManyToMany会更好,因为将来,即使需求发生变化并且具有单独的表,对您来说也很容易。

相关问题