在manyToMany关系中,当我尝试从下拉列表中添加一个包含所选车辆的新驱动程序时,它会抛出异常 java.sql.SQLException:字段'vehicle_id'没有默认值
但是,如果我在数据库中设置了一个默认值,它可以通过在(driver_series_stats_xref)表中插入两个不同的行来正常工作,一个用于我要添加的内容,另一个用于我设置的默认值db。
Entity.java
@Column(name="driver_id", unique = true, nullable=false)
private Long driverId;
@Column(name="first_name")
private String firstName;
@Column(name="last_name")
private String lastName;
@ManyToMany
@JoinTable(name = "driver_series_stats_xref",
joinColumns = @JoinColumn(name = "driver_id"),
inverseJoinColumns = @JoinColumn(name = "vehicle_id", referencedColumnName ="vehicle_id"))
private List<Vehicle> listOfVehicles = new ArrayList<Vehicle>();
//getter and setter
创建表:
CREATE TABLE `driver_vehicle_xref` (
`driver_id` TINYINT(3) UNSIGNED NOT NULL,
`vehicle_id` SMALLINT(5) UNSIGNED NOT NULL,
`starts_num` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`driver_id`, `vehicle_id`),
INDEX `fk_driver_vehicle_xref_2` (`vehicle_id`),
CONSTRAINT `fk_driver_vehicle_xref_1` FOREIGN KEY (`driver_id`) REFERENCES `driver` (`driver_id`),CONSTRAINT `fk_driver_vehicle_xref_2` FOREIGN KEY (`vehicle_id`) REFERENCES `vehicle` (`vehicle_id`)
)
driverDao.java
public Long addorUpdateDriver(final Driver driver) {
sessionFactory.getCurrentSession().saveOrUpdate(driver);
return driver.getDriverId();
}
driverService.java
@Transactional
public Long addToDriver(Driver driver, Vehicle vehicle) {
vehicle = vehicleDao.getVehicleById(vehicle.getVehicleId());
driver.getListOfVehicles().add(vehicle);
Long driverId = driverDao.addorUpdateDriver(driver);
driver.setDriverId(driverId);
return driverId;
}
controller.java(post方法)
public String addDriverSubmit(@ModelAttribute Driver driver, Vehicle vehicle, BindingResult result, @RequestParam (value="mode") String mode,
HttpServletRequest request) {
String vehicleId = request.getParameter("vehicleId");
request.getAttribute("driverId");
if("Save".equalsIgnoreCase(mode)) {
driverService.addToDriver(driver, vehicle);
}
错误消息 HTTP状态500 - 请求处理失败;嵌套异常是org.springframework.orm.hibernate4.HibernateJdbcException:Hibernate数据访问的JDBC异常:SQL的SQLException [n / a]; SQL状态[HY000];错误代码[1364];无法执行声明;嵌套异常是org.hibernate.exception.GenericJDBCException:无法执行语句
和 java.sql.SQLException:字段'vehicle_id'没有默认值