首先...对不起,我的描述...我希望我能说清楚。 我想创建一个有汽车和司机的项目。一辆汽车可以有一名司机,而一名驾驶员可以有多辆汽车。
@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`)
);
答案 0 :(得分:1)
这两种解决方案都将由您完全决定。
对于当前代码,它不会创建第三个表,但是Car表的每一行都会有一个驱动程序值。
但是如果您设置@ManyToMany会更好,因为将来,即使需求发生变化并且具有单独的表,对您来说也很容易。