简体   繁体   English

MySQL 一对多,Java,hibernate

[英]MySQL one-to-many, Java, hibernate

First...sorry for my description...I hope I can be clear.首先......对不起我的描述......我希望我能清楚。 I want to create a project, where I have cars and drivers.我想创建一个项目,我有汽车和司机。 One car can have one driver and one driver can have many cars.一辆车可以有一个司机,一个司机可以有很多辆车。

@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;

[...]
}

and this is the mysql syntax, which i don't understand very clear, if i have one to many relationships, do I need a 3rd table where i have id, carID and driverID for that car?这是 mysql 语法,我不太清楚,如果我有一对多的关系,我是否需要第三张表,其中有该车的 id、carID 和 driverID? sorry for my dummy questions对不起我的假问题

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`)
);

Its completely upto you to decide as both the solution will work.这完全由您决定,因为这两种解决方案都可以工作。

For the current code it will not create a third table but every row of Car table will have a driver value.对于当前代码,它不会创建第三个表,但 Car 表的每一行都会有一个驱动程序值。

But it would be better if you make @ManyToMany as in future it will be easy for you even if the requirement changes and will have separate table.但是,如果您制作 @ManyToMany 会更好,因为将来即使需求发生变化并且会有单独的表格,您也会很容易。

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

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