繁体   English   中英

MySQL 一对多,Java,hibernate

[英]MySQL one-to-many, Java, 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`)
);

这完全由您决定,因为这两种解决方案都可以工作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM