bbewx 2015-03-16 14:10 采纳率: 0%
浏览 1624

hibernate如何保存三层结构的数据表

各位大神,小弟急求!
我现在想实现以下功能:
学校——班级——学生之间均为一对多的关系,我想实现在保存学校信息的同时能够将班级信息和学生信息均保存。目前代码如下:
学校类:

 @Entity
public class School {
    private String      id;
    private String      name;
    private List<Clazz> clazzSet;

    @OneToMany(mappedBy = "school", fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    public List<Clazz> getClazzSet() {
        return clazzSet;
    }

    public void setClazzSet(List<Clazz> clazzSet) {
        this.clazzSet = clazzSet;
    }

    @GeneratedValue(generator = "student")
    @GenericGenerator(name = "student", strategy = "uuid")
    @Id
    @Column(name = "ID")
    public String getId() {
        return id;
    }

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

    @Basic
    @Column(name = "NAME")
    public String getName() {
        return name;
    }

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

班级类:

 @Entity
@Table(name = "CLASS", schema = "PUBLIC", catalog = "HIBERNATE")
public class Clazz {
    private String        id;
    private String        num;
    private School        school;
    private List<Student> studentSet;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "SCHOOL_ID", referencedColumnName = "ID")
    public School getSchool() {
        return school;
    }

    public void setSchool(School school) {
        this.school = school;
    }

    @OneToMany(mappedBy = "clazz", fetch = FetchType.LAZY)
    @Cascade(CascadeType.SAVE_UPDATE)
    public List<Student> getStudentSet() {
        return studentSet;
    }

    public void setStudentSet(List<Student> studentSet) {
        this.studentSet = studentSet;
    }

    @GeneratedValue(generator = "student")
    @GenericGenerator(name = "student", strategy = "uuid")
    @Id
    @Column(name = "ID")
    public String getId() {
        return id;
    }

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

    @Basic
    @Column(name = "NUM")
    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }
}

学生类:

 @Entity
public class Student {
    private String id;
    private String name;
    private Clazz clazz;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CLASS_ID", referencedColumnName = "ID")
    public Clazz getClazz() {
        return clazz;
    }

    public void setClazz(Clazz clazz) {
        this.clazz = clazz;
    }

    @GeneratedValue(generator = "student")
    @GenericGenerator(name = "student", strategy = "uuid")
    @Id
    @Column(name = "ID")
    public String getId() {
        return id;
    }

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

    @Basic
    @Column(name = "NAME")
    public String getName() {
        return name;
    }

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

测试代码如下:

 @org.junit.Test
    public void testSave() {
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        School school = new School();
        school.setName("北航");
        List<Clazz> clazzList = new ArrayList<>(2);
        Clazz clazz1 = new Clazz();
        clazz1.setSchool(school);
        clazz1.setNum("01");
        Clazz clazz2 = new Clazz();
        clazz2.setSchool(school);
        clazz2.setNum("02");

        List<Student> studentList1 = new ArrayList<>(2);
        Student stu1 = new Student();
        stu1.setClazz(clazz1);
        stu1.setName("zs");
        Student stu2 = new Student();
        stu2.setClazz(clazz1);
        stu2.setName("ls");
        studentList1.add(stu1);
        studentList1.add(stu2);

        List<Student> studentList2 = new ArrayList<>(2);
        Student stu3 = new Student();
        stu3.setClazz(clazz2);
        stu3.setName("ww");
        Student stu4 = new Student();
        stu3.setClazz(clazz2);
        stu4.setName("zl");
        studentList2.add(stu3);
        studentList2.add(stu4);

        clazz1.setStudentSet(studentList1);
        clazz2.setStudentSet(studentList2);
        clazzList.add(clazz1);
        clazzList.add(clazz2);

        school.setClazzSet(clazzList);
        session.save(school);

        transaction.commit();
        session.close();
    }

测试时报错如下:

图片说明

请问各位大神,何解???

  • 写回答

2条回答 默认 最新

  • devmiao 2015-03-16 16:38
    关注

    CLASS_ID不允许为空,检查你的数据库的定义。

    评论

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题