log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    select
        hibernate_sequence.nextval 
    from
        dual
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at org.hibernate.type.EntityType.toLoggableString(EntityType.java:463)
at org.hibernate.type.CollectionType.renderLoggableString(CollectionType.java:163)
at org.hibernate.type.CollectionType.toLoggableString(CollectionType.java:148)
at org.hibernate.pretty.Printer.toString(Printer.java:53)
at org.hibernate.pretty.Printer.toString(Printer.java:90)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:97)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.svse.test.test.add(test.java:27)
at com.svse.test.test.main(test.java:13)

解决方案 »

  1.   

    <hibernate-mapping>
        <class name="com.svse.entity.Room" table="ROOM" schema="SCOTT">
            <id name="id" type="java.lang.Long">
                <column name="ID" precision="22" scale="0" />
                <generator class="native" />
            </id>
            <many-to-one name="tuser" class="com.svse.entity.Tuser" update="false" insert="false" fetch="select">
                <column name="ID" precision="22" scale="0" not-null="true" unique="true" />
            </many-to-one>
            <property name="address" type="java.lang.String">
                <column name="ADDRESS" length="100" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>
      

  2.   

    <hibernate-mapping>
        <class name="com.svse.entity.Tuser" table="TUSER" schema="SCOTT">
            <id name="id" type="java.lang.Long">
                <column name="ID" precision="22" scale="0" />
                <generator class="native" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="NAME" length="20" not-null="true" />
            </property>
            <set name="rooms" inverse="true">
                <key>
                    <column name="ID" precision="22" scale="0" not-null="true" unique="true" />
                </key>
                <one-to-many class="com.svse.entity.Room" />
            </set>
        </class>
    </hibernate-mapping>
      

  3.   

    public static void add(){
    Configuration configuration = new Configuration();
    SessionFactory factory = configuration.configure().buildSessionFactory();
    Session session = factory.openSession();
    Transaction transaction = session.beginTransaction();
    Room room = new Room();
    room.setAddress("12312312");
    Tuser tuser = new Tuser();
    tuser.setName("123123");
    tuser.getRooms().add(room.getAddress());
    session.save(tuser);
    transaction.commit();
    session.close();
    }
      

  4.   

    1.log4j的配置有问题;
    2.Main主函数在测试的时候出现问题了。你是如何测试的? 要是使用JUnit测试也不该是这个结果的。
      

  5.   

    tuser.getRooms().add(room.getAddress());
    这句有问题吧  getRoom应该是获得Room对象集合 你添加个String算什么意思 - -
      

  6.   

    正解!
    如果这行代码在编译时没报错,说明楼主还需要了解一下泛型,如果tuser.getRooms()返回的是Room类型的容器用到了泛型,问题就很直接了