簡體   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