Hibernate OneToOne关系:无法删除子表

时间:2012-11-30 09:51:38

标签: java hibernate mapping one-to-one

让我们说我们生活在一个人只能拥有一辆车的世界(请原谅我的蹩脚榜样)

假设我有UserDetails

public class UserDetails {

    @Id
    @GeneratedValue
    @Column(name = "USER_ID")
    private int id;
    @Column(name = "USER_NAME")
    private String name;
    @OneToOne
    private Vehicle vehicle;

    public Vehicle getVehicle() {
        return  vehicle;
    }

    public void setVehicle(Vehicle  vehicle) {
        this.vehicle =  vehicle;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

这是我的Vehicle班级

@Entity
public class Vehicle {
    @Id
    @GeneratedValue
    private long vechile_id;
    private String vehicleName;
    public long getVechile_id() {
        return vechile_id;
    }
    public void setVechile_id(long vechile_id) {
        this.vechile_id = vechile_id;
    }

    public String getVehicleName() {
        return vehicleName;
    }
    public void setVehicleName(String vehicleName) {
        this.vehicleName = vehicleName;
    }   
}

保存到数据库后,它运行正常,但当我去删除车辆表时,我的工作台上出现了这个错误

注意 UserDetailsVehicle表中只有一个条目。

ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails

SQL Statement:

drop table `hibernate`.`vehicle`

我怎么不被允许放下桌子?我应该先删除UserDetails表吗?

1 个答案:

答案 0 :(得分:1)

如果你删除了Vehicle表,那么这将使UserDetails表失去它的参照完整性,因为车辆列的外键指向无处。从UserDetails中删除fk约束或车辆列,然后您可以删除所需的表。