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

hibernate中两个级联表,一个student表和一个book表,student表中有主键id,是book表中的外键;在用Student的类无法得到set集

2012-05-02 
hibernate中两个级联表,一个student表和一个book表,student表中有主键id,是book表中的外键;在用Student的

hibernate中两个级联表,一个student表和一个book表,student表中有主键id,是book表中的外键;在用Student的类无法得到set集
查询的代码
Session   session=bo.HibernateSessionFactory.getSession();
Session   session=bo.HibernateSessionFactory.getSession();

//查询每个同学所拥有的所有书x;
Query   query=session.createQuery( "from   Student ");
List   list=query.list();
for(int   i=0;i <list.size();i++)
{
Student   student=(Student)list.get(i);
System.out.println(student.getId());//到这里可以
Set   listbooks=student.getBooks();//出错
System.out.println(listbooks);
/*Iterator   it=listbooks.iterator();
while(it.hasNext())
{
Book   book=(Book)it.next();
System.out.println( "姓名     "+student.getName()+ "   书名         "+book.getName());
}*/
}


Book.hbm.xml文件
<?xml   version= "1.0 "   encoding= "utf-8 "?>
<!DOCTYPE   hibernate-mapping   PUBLIC   "-//Hibernate/Hibernate   Mapping   DTD   3.0//EN "
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<!--  
        Mapping   file   autogenerated   by   MyEclipse   Persistence   Tools
-->
<hibernate-mapping>
        <class   name= "po.Book "   table= "BOOK "   schema= "DB2ADMIN ">
                <id   name= "id "   type= "java.lang.Integer ">
                        <column   name= "ID "   />
                        <generator   class= "native "   />
                </id>
                <many-to-one   name= "student "   class= "po.Student "   fetch= "select ">
                        <column   name= "SID "   />
                </many-to-one>
                <property   name= "name "   type= "java.lang.String ">
                        <column   name= "NAME "   length= "30 "   />
                </property>
        </class>
</hibernate-mapping>

Stuent.hbm.xml文件
<?xml   version= "1.0 "   encoding= "utf-8 "?>
<!DOCTYPE   hibernate-mapping   PUBLIC   "-//Hibernate/Hibernate   Mapping   DTD   3.0//EN "
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<!--  
        Mapping   file   autogenerated   by   MyEclipse   Persistence   Tools
-->
<hibernate-mapping>
        <class   name= "po.Student "   table= "STUDENT "   schema= "DB2ADMIN ">
                <id   name= "id "   type= "java.lang.Integer ">


                        <column   name= "ID "   />
                        <generator   class= "native "   />
                </id>
                <property   name= "name "   type= "java.lang.String ">
                        <column   name= "NAME "   length= "10 "   />
                </property>
                <property   name= "age "   type= "java.lang.Short ">
                        <column   name= "AGE "   />
                </property>
                <set   name= "books "   inverse= "true ">
                        <key>
                                <column   name= "SID "   />
                        </key>
                        <one-to-many   class= "po.Book "   />
                </set>
        </class>
</hibernate-mapping>


用的是DB2数据库;错误提示如下

log4j:WARN   No   appenders   could   be   found   for   logger   (org.hibernate.cfg.Environment).
log4j:WARN   Please   initialize   the   log4j   system   properly.
1
Exception   in   thread   "main "   org.hibernate.exception.SQLGrammarException:   could   not   initialize   a   collection:   [po.Student.books#1]
at   org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at   org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at   org.hibernate.loader.Loader.loadCollection(Loader.java:2005)
at   org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36)
at   org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565)
at   org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:63)
at   org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1717)
at   org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344)
at   org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at   org.hibernate.collection.PersistentSet.toString(PersistentSet.java:309)
at   java.lang.String.valueOf(String.java:2827)
at   java.io.PrintStream.println(PrintStream.java:771)
at   bo.tt.main(tt.java:33)
Caused   by:   com.ibm.db2.jcc.am.SqlSyntaxErrorException:   DB2   SQL   Error:   SQLCODE=-551,   SQLSTATE=42501,   SQLERRMC=ADMINDB2;SELECT;DB2ADMIN.BOOK,   DRIVER=3.59.81


at   com.ibm.db2.jcc.am.dd.a(dd.java:676)
at   com.ibm.db2.jcc.am.dd.a(dd.java:60)
at   com.ibm.db2.jcc.am.dd.a(dd.java:127)
at   com.ibm.db2.jcc.am.bn.c(bn.java:2546)
at   com.ibm.db2.jcc.am.bn.d(bn.java:2534)
at   com.ibm.db2.jcc.am.bn.a(bn.java:2026)
at   com.ibm.db2.jcc.t4.cb.g(cb.java:140)
at   com.ibm.db2.jcc.t4.cb.a(cb.java:40)
at   com.ibm.db2.jcc.t4.q.a(q.java:32)
at   com.ibm.db2.jcc.t4.rb.i(rb.java:135)
at   com.ibm.db2.jcc.am.bn.gb(bn.java:1997)
at   com.ibm.db2.jcc.am.cn.pc(cn.java:3009)
at   com.ibm.db2.jcc.am.cn.b(cn.java:3786)
at   com.ibm.db2.jcc.am.cn.bc(cn.java:678)
at   com.ibm.db2.jcc.am.cn.executeQuery(cn.java:652)
at   org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:187)
at   org.hibernate.loader.Loader.getResultSet(Loader.java:1791)
at   org.hibernate.loader.Loader.doQuery(Loader.java:674)
at   org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at   org.hibernate.loader.Loader.loadCollection(Loader.java:1998)
...   10   more


[解决办法]
放个log4j的jar包进去看看啊 会给出详细的错误信息! 我一般都是这样测试出来的!
[解决办法]
懒加载 ,,,,你在web。xml写配一个opsenSeesionInViewFilter

热点排行