【问题标题】:Issue with one to one mapping delete一对一映射删除问题
【发布时间】:2016-07-08 00:50:56
【问题描述】:

我有一个使用 Hibernate ORM 运行的 ejb 模块,我有两个用于模型的 POJO, 这里是第一堂课:

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

}

这是我的第二节课:

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

有人能说我的映射机制有什么问题吗?

【问题讨论】:

    标签: hibernate mapping one-to-one


    【解决方案1】:

    删除车辆时,由于是一对一映射,传输对象也会被删除。 您正在删除“车辆”实体,并且您的一对一处于“转移”状态。 两种方法:

    1 - 在删除车辆之前删除传输对象。

    2 - 您需要将删除级联到另一个实体。像这样注释您的@OneToOne:

    @OneToOne(cascade = CascadeType.ALL)
    

    但在“车辆”实体上...您必须更改映射

    【讨论】:

    • 感谢您的快速回答,但我希望我在不删除转移的情况下删除车辆,并且我必须在转移实体中而不是在车辆实体中进行映射,可以吗?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多