Classes.java:
        private int id;

private String name; private Set students;
---------------------
Classes.hbm.xml:
<class name="com.my.hibernate.Classes" table="tb_classes">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<!-- 设置inverse 属性,将反转,将给多的一端,使update时效-->
<set name="students" inverse="false" cascade="all">
<key column="classesId" />
<one-to-many class="com.my.hibernate.Student" />
</set>
</class>
------------------------------
Student.java:
        private int id;

private String name; private Classes classes;
------------------------------
Student.hbm.xml:
<class name="com.my.hibernate.Student" table="tb_student">
<id name="id">
<generator class="native" />
</id>
<property name="name" type="text" />
<!-- 双向,不加column属性,将在tb_student新添加一个字段classes,要保持一致classesId -->
<many-to-one name="classes" column="classesId" />
</class>
----------------------------------
数据库为Sql server 2000 sp4,Hibernate3.2.
当我通过:
-----------------------------------
public void testLoad1(){
Session session = null;
try{
session = HibernateUtils.getSession();
session.beginTransaction();

Classes classes = (Classes)session.load(Classes.class, 1);
System.out.println("classes.name :"+classes.getName());

Set students = classes.getStudents();

for(Iterator iter=students.iterator();iter.hasNext();){
Student student = (Student)iter.next();
System.out.println("student.name :"+student.getName());
}

session.getTransaction().commit();
}catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
}finally{
HibernateUtils.closeSession(session);
}

}
-------------------------------------------
就报:org.hibernate.exception.GenericJDBCException: could not initialize a collection: [com.my.hibernate.Classes.students#1]
当我将:type="text"取掉,name字段的类型为varchar类型时,一切正常!但是,我现在,要name字段类型为text,怎么解决这个问题呢?
但是,当我把数据库改为mysql时,配置文件不变,运行程序又一切正常!

解决方案 »

  1.   

    你用的sql   server的版本是什么啊?因为sql   server的text的数据类型并不是标准的sql类型,标准的sql类型是clob(微软搞特殊),所以在使用hibernate映射的时候会有问题,我建议你在使用hibernate的时候,数据库类型尽量使用的标准的SQL类型。根据你的具体需求,来看看能不能用varchar这个类型来代替text啊?你的业务需要这个字段最长多少?varchar在sql   server中的最大值是8000,如果需求多于这个就没有办法了。   
      还有,如果你使用sql   server2005就可以使用varchar(max),这样就可以存储2GB的数据。
      

  2.   

    改成:type="text" -> type="string"
    text不是Java的数据类型.
      

  3.   


       pay_checkIdea text                 null,
    </property>
            <property name="payCheckIdea" type="java.lang.String">
                <column name="pay_checkIdea" />
            </property>数据库里面是text   hibernate配置文件里面也用 java.lang.String  
      

  4.   


    映射文件也用java.lang.String没错!
      

  5.   

    4楼:
    private String name;