首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

hibernate3表连接,插入数据。求指教

2012-08-13 
hibernate三表连接,插入数据。求指教看在我这么晚还在学习的份上。大家给点鼓励吧。。能帮我解决问题是对我最

hibernate三表连接,插入数据。求指教
看在我这么晚还在学习的份上。大家给点鼓励吧。。能帮我解决问题是对我最好的鼓励。。感激不尽。。

最近在学hibernate。学到映射关系,想自己综合的练练手。但是插入数据抛了一个异常:

Java code
org.hibernate.MappingException: Unknown entity: java.util.HashSet    at org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:628)    at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1366)    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)    at com.test.bean.TestHibernate.main(TestHibernate.java:79)

先看看pojo类:胜略getter,setter方法了。
主要关系是:课程与学生是多对多的关系。班级与学生是一对多的关系
Java code
        /**     * 学生类     */    private String id;    private String name;    private int age;    private Set<Course> course;        /**     * 班级类     */    private String id;    private String name;    private Set<Student> student;        /**     * 课程类     */    private String id;    private String name;    private Set<Student> student;

再看看映射文件:
student.hbm.xml:
Java code
<class name="com.test.bean.Student" table="student">        <id name="id" column="id" type="string">            <generator class="uuid"/>        </id>        <property name="name" column="studentName" type="string"/>        <property name="age" column="Studentage" type="int" />        <set name="course" table="student_course" cascade="all" >            <key column="student_id"/>            <many-to-many class="com.test.bean.Course" column="course_id" />        </set>    </class>

course.hbm.xml
Java code
<class name="com.test.bean.Course" table="course">        <id name="id" column="id" type="string">            <generator class="uuid"/>        </id>        <property name="name" column="courseName" type="string"/>        <set name="student" table="student_course" cascade="all">            <key column="student_id"/>            <many-to-many class="com.test.bean.Student" column="course_id"  />        </set>    </class>

还有一个team.hbm.xml
Java code
<class name="com.test.bean.Team" table="Team">        <id name="id" column="id" type="string">            <generator class="uuid"></generator>        </id>        <property name="name" column="teamName" type="string" />        <set name="student" cascade="all" inverse="true" fetch="select">            <key column="team_id"></key>            <one-to-many class="com.test.bean.Student" />        </set>    </class> 


最后就是测试了:
Java code
    private static SessionFactory sessionfactory;    static{        try {            //创建会话工厂            sessionfactory=new Configuration().configure().buildSessionFactory();        } catch (Exception e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        Session session=sessionfactory.openSession();        Transaction tx=null;        Team team=new Team();        team.setName("team1");        team.setStudent(new HashSet<Student>());                Student stu1=new Student();        stu1.setAge(19);        stu1.setName("cc");                Student stu2=new Student();        stu2.setAge(20);        stu2.setName("aa");                Student stu3=new Student();        stu3.setAge(21);        stu3.setName("bb");        stu1.setCourse(new HashSet<Course>());        stu2.setCourse(new HashSet<Course>());        stu3.setCourse(new HashSet<Course>());                Course course1=new Course();        course1.setName("英语");        Course course2=new Course();        course2.setName("地理");        Course course3=new Course();        course3.setName("数学");        course1.setStudent(new HashSet<Student>());        course2.setStudent(new HashSet<Student>());        course3.setStudent(new HashSet<Student>());        //        course1.getStudent().add(stu1);//        course1.getStudent().add(stu3);//        course2.getStudent().add(stu1);//        course2.getStudent().add(stu3);//        course3.getStudent().add(stu2);//        course3.getStudent().add(stu3);                stu1.getCourse().add(course1);        stu1.getCourse().add(course2);        stu2.getCourse().add(course3);        stu3.getCourse().add(course1);        stu3.getCourse().add(course2);        stu3.getCourse().add(course3);                Set<Student> student=team.getStudent();        student.add(stu1);        student.add(stu2);        student.add(stu3);        try {            tx=session.beginTransaction();            session.save(student);            tx.commit();        } catch (Exception e) {            if(null!=tx)                tx.rollback();          e.printStackTrace();        }finally{            session.close();        }    }


[解决办法]
擦 报的错是 未知的实体hashset 类型不一致 感觉是 
你实体里头的是 set的对象 虽然是父子类的关系 估计还是有差别的 你改改试试
[解决办法]
多对多改成 1对多 多对1的形式,建立一个中间表啊.

热点排行