今天使用hibernate动态模型的时候发现了一个问题,网上hibernate动态模型一对多的的列子很少,就那么一个。下面我贴出我的代码: Session session = pgroupDao.getHibernateTemplate().getSessionFactory().openSession();
session.beginTransaction();
Map class1 = new HashMap();
class1.put("id", "71D959D4B8A14F11A0DCF3464232555C");
class1.put("name", "one-to-many-students");
Map stu1 = new HashMap();
Map stu2 = new HashMap();
Map stu3 = new HashMap();
stu1.put("id", "D86D0049E8014408BC720C8535728A2A");
stu1.put("name", "stu1");
stu1.put("classid", "71D959D4B8A14F11A0DCF3464232555C");
stu1.put("id", "5A469CCF00DA47D08815F501CD47CCA2");
stu1.put("name", "stu2");
stu1.put("classid", "71D959D4B8A14F11A0DCF3464232555C");
stu1.put("id", "6B3FA58D9623461BAD788216C0246ED6");
stu1.put("name", "stu3");
stu1.put("classid", "71D959D4B8A14F11A0DCF3464232555C");
List stuList = new ArrayList();
class1.put("students", stuList);
stuList.add(stu1);
stuList.add(stu2);
stuList.add(stu3);

session.save("class1",class1);
System.out.println("===================保存已成功==================");
session.getTransaction().commit();
session.close();/*==============================================================*/
/* Table: "class1"                                              */
/*==============================================================*/
create table class1 
(
   id                 varchar(36)          not null,
   name               varchar(20),
   constraint PK_CLASS1 primary key (id)
);
/*==============================================================*/
/* Table: "student"                                             */
/*==============================================================*/
create table student 
(
   id                 varchar(36)          not null,
   name               varchar(20),
   classid           varchar(36),
   constraint PK_STUDENT primary key (id)
);alter table student
   add constraint FK_STUDENT_REFERENCE_CLASS1 foreign key (classid)
      references class1 (id);<hibernate-mapping>
<class entity-name="student" table="student">
<property name="name"  type="java.lang.String">
            <column name="name" length="20" />
        </property>
 <many-to-one name="classid"  class="class1"  not-null="true"> <column name="classid" length="20"/> </many-to-one>
<id name="id" type="java.lang.String">
             <column name="id" length="20"/>
            <generator class="assigned" />
         </id>
         
</class>
</hibernate-mapping>
<hibernate-mapping>
<class entity-name="class1" table="class1">
<property name="name"  type="java.lang.String">
            <column name="name" length="20" />
        </property>
<id name="id" type="java.lang.String">
             <column name="id" length="20"/>
            <generator class="assigned" />
         </id>
         <bag name="students" lazy="false" cascade="all"  inverse="true"><key><column name="classid" length="20"/></key><one-to-many class="student" />  </bag>
</class>
最后保存的时候java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map报这个错,我想可能是List stuList = new ArrayList();
class1.put("students", stuList);
session.save("class1",class1);这里出错的,但是苦于网上只有http://www.blogjava.net/sparkyang/archive/2005/09/12/12782.html这个例子,我也不知道如何下手。
请大家帮帮忙Hibernate动态模型java

解决方案 »

  1.   

    Session session = pgroupDao.getHibernateTemplate().getSessionFactory().openSession();
    session.beginTransaction();
    Map class1 = new HashMap();
    class1.put("id", "71D959D4B8A14F11A0DCF3464232555C");
    class1.put("name", "one-to-many-students");
    Map stu1 = new HashMap();
    Map stu2 = new HashMap();
    Map stu3 = new HashMap();
    stu1.put("id", "D86D0049E8014408BC720C8535728A2A");
    stu1.put("name", "stu1");
    stu1.put("classid", "71D959D4B8A14F11A0DCF3464232555C");
    stu2.put("id", "5A469CCF00DA47D08815F501CD47CCA2");
    stu2.put("name", "stu2");
    stu2.put("classid", "71D959D4B8A14F11A0DCF3464232555C");
    stu3.put("id", "6B3FA58D9623461BAD788216C0246ED6");
    stu3.put("name", "stu3");
    stu3.put("classid", "71D959D4B8A14F11A0DCF3464232555C");
     
    session.save("student",stu1);
    session.save("student",stu2);
    session.save("student",stu3);
    System.out.println("===================保存已成功==================");
    session.getTransaction().commit();
    session.close();
    改了一下,你看能不能行