一对一映射删除问题
Issue with one to one mapping delete
我有一个 ejb 模块,它是 运行 Hibernate ORM,我有两个 POJO 模型,
这里是第一个 class :
@Entity
public class Vehicle implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
public Vehicle() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
这是我的第二个 class :
@Entity
public class Transfer implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private Vehicle vehicle;
public Transfer() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne
public Vehicle getVehicle() {
return vehicle;
}
public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}
}
现在,当我尝试删除 Vehicle v1 实例时出现此错误:
Cannot delete or update a parent row: a foreign key constraint fails (`pallasmobiledb`.`transfer`, CONSTRAINT `FK_9u0s4qxviu868ir3r7sgtbuqa` FOREIGN KEY (`cpo_id`) REFERENCES `user` (`id`))
有人能说说我的映射机制有什么问题吗?
移除车辆时,由于是一对一的映射,传输对象也会被删除。
您正在删除 "Vehicle" 个实体,您的一对一在 "Transfer" 上。
两种方法:
1 - 在删除车辆之前删除传输对象。
2 - 您需要将删除级联到另一个实体。像这样注释你的@OneToOne :
@OneToOne(cascade = CascadeType.ALL)
但是在 "Vehicle" 实体上...您必须更改映射
我有一个 ejb 模块,它是 运行 Hibernate ORM,我有两个 POJO 模型, 这里是第一个 class :
@Entity
public class Vehicle implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
public Vehicle() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
这是我的第二个 class :
@Entity
public class Transfer implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private Vehicle vehicle;
public Transfer() {
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@OneToOne
public Vehicle getVehicle() {
return vehicle;
}
public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}
}
现在,当我尝试删除 Vehicle v1 实例时出现此错误:
Cannot delete or update a parent row: a foreign key constraint fails (`pallasmobiledb`.`transfer`, CONSTRAINT `FK_9u0s4qxviu868ir3r7sgtbuqa` FOREIGN KEY (`cpo_id`) REFERENCES `user` (`id`))
有人能说说我的映射机制有什么问题吗?
移除车辆时,由于是一对一的映射,传输对象也会被删除。 您正在删除 "Vehicle" 个实体,您的一对一在 "Transfer" 上。 两种方法:
1 - 在删除车辆之前删除传输对象。
2 - 您需要将删除级联到另一个实体。像这样注释你的@OneToOne :
@OneToOne(cascade = CascadeType.ALL)
但是在 "Vehicle" 实体上...您必须更改映射