Hibernate異常

Hibernate問題

昨天做Hibernate一對一關係映射中遇到如下異常:

Cannot add or update a child row: a foreign key constraint fails (`hibernate`.`student`, CONSTRAINT `FK_n4ra8kk0v0g99fi7j4ar69ntu` FOREIGN KEY (`idcard_id`) REFERENCES `Idcard` (`id`))
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not execute statement

這個異常折磨了我幾個小時,後來分析發現是因爲被關聯表的主鍵在Hibernate配置文件中沒有設置爲自增,所以該主鍵爲0,外鍵值找不到正確值,所以報該異常,下面附上代碼。

@Entity
public class Student {
    private int id;
    private String name;
    private Idcard idcard;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "idcard_id",unique = true)
    public Idcard getIdcard() {
        return idcard;
    }

    public void setIdcard(Idcard idcard) {
        this.idcard = idcard;
    }
}
@Entity
public class Idcard {
    private int id;
    private String num;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getId() {
        return id;
    }

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

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }
}
//測試類
public class Annotation {
    private static SessionFactory factory;
    public static void main(String... args){
        try{
            factory = new Configuration().configure().buildSessionFactory();
        }catch (Throwable ex) {
            System.err.println("Failed to create sessionFactory object." + ex);
            throw new ExceptionInInitializerError(ex);
        }
        save();
    }

    private static void save() {
        Idcard idcard= new Idcard();
        idcard.setNum("123456");
        Student student = new Student();
        student.setName("fzd");
        Session session = factory.openSession();
        Transaction tx = session.beginTransaction();
        student.setIdcard(idcard);
        session.save(student);
        tx.commit();
        session.close();
    }
}

這樣能 測試成功。
但是如果在Idcard類中將id不設置爲自增,則報上述異常。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章