Java瑣事

          -I am not alone
          posts - 54, comments - 30, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

               在ssh三大框架整合時,使用hibernate能很好的控制表與表的關系。但配置稍有疏忽,也容易出錯,下面代碼就是一種。
          我在數據庫中沒有設置外鍵關系,而是想通過hibernate來控制,有兩個表,欄目表(lm)和課程表(kc),他們是多對一的關系。所以我在Lm的pojo類中如下設置

          public class Lm implements java.io.Serializable
          {
              
          //欄目id
              private int id;
              
          private String name;
              
          private Kc kc;
              
          //順序
              private int location;

                  
          //getter和setter方法

          }

          映射文件Lm.hbm.xml如下設置

          <class catalog="eteares" name="cn.edu.ujn.wsjx.model.Lm" table="lm">
                  
          <id name="id" type="java.lang.Integer">
                      
          <column name="id" />
                      
          <generator class="identity" />
                  
          </id>
                  
          <property name="name" type="java.lang.String">
                      
          <column length="20" name="name" />
                  
          </property>
                  
          <many-to-one name="kc" class="cn.edu.ujn.wsjx.model.Kc">
                      
          <column name="kcId" />
                  
          </many-to-one>
                  
          <property name="location" type="java.lang.Integer">
                      
          <column name="location" />
                  
          </property>
              
          </class>

          結果部署,運行,顯示如下錯誤

          Hibernate: 
              select
                  lm0_.id as id5_,
                  lm0_.name as name5_,
                  lm0_.kcId as kcId5_,
                  lm0_.location as location5_ 
              from
                  eteares.lm lm0_ 
              where
                  lm0_.kcId
          =?
          2010-10-2 0:35:48 org.apache.catalina.core.StandardWrapperValve invoke
          嚴重: Servlet.service() 
          for servlet default threw exception
          java.lang.NullPointerException
           at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:
          372)
           at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:
          3121)
           at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:
          232)
           at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:
          173)
           at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:
          87)
           at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:
          862)
           at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:
          830)
           at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:
          266)
           at org.hibernate.type.EntityType.resolve(EntityType.java:
          303)
           at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:
          116)
           at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:
          842)
           at org.hibernate.loader.Loader.doQuery(Loader.java:
          717)
           at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:
          224)
           at org.hibernate.loader.Loader.doList(Loader.java:
          2145)
           at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:
          2029)
           at org.hibernate.loader.Loader.list(Loader.java:
          2024)
           at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:
          375)
           at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:
          308)
           at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:
          153)
           at org.hibernate.impl.SessionImpl.list(SessionImpl.java:
          1106)
           at org.hibernate.impl.QueryImpl.list(QueryImpl.java:
          79)
           at org.springframework.orm.hibernate3.HibernateTemplate$
          29.doInHibernate(HibernateTemplate.java:849)
           at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:
          372)
           at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:
          840)
           at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:
          836)
           at cn.edu.ujn.wsjx.dao.impl.LmDao.findByCourse(LmDao.java:
          74)
           at cn.edu.ujn.wsjx.managecolumn.service.impl.ColumnService.getColumnByCourse(ColumnService.java:
          56)
           at cn.edu.ujn.wsjx.managecolumn.action.ColumnAction.browseColumn(ColumnAction.java:
          59)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

          經診斷,此為hibernate的設置問題,因為<many-to-one>默認的lazy屬性為true,即使用了懶加載,而懶加載是在用到該對象的屬性時才會加載數據庫。所以應該把在標簽中加入lazy="false"
          主站蜘蛛池模板: 西青区| 安乡县| 南华县| 巨鹿县| 望奎县| 元朗区| 望江县| 南乐县| 汉源县| 望谟县| 达日县| 五台县| 崇礼县| 扎兰屯市| 乳山市| 饶平县| 长岛县| 开化县| 永新县| 江源县| 西昌市| 松江区| 峨边| 四川省| 鸡西市| 灵台县| 武夷山市| 屏东市| 红安县| 山阳县| 泰来县| 张家界市| 大洼县| 民权县| 汉中市| 疏勒县| 永清县| 闸北区| 忻州市| 牙克石市| 盘锦市|