躺在沙灘上的小豬

          快樂的每一天

          #

          一次類型轉換的錯誤

          RoomType和RoomState的主鍵是Integer,在get的時候忘記轉換為Integer了:

          ???????? this .getHibernateTemplate().execute( new ?HibernateCallback()?{
          ????????????
          public ?Object?doInHibernate(Session?session)? throws ?HibernateException?{
          ????????????????room.setType((RoomType)?session.get(RoomType.
          class ,?typeId));
          ????????????????room.setState((RoomState)?session.get(RoomState.
          class ,?stateId));
          ????????????????session.update(room);
          ????????????????
          return ? null ;
          ????????????}
          ????????});

          沒想到hibernate居然大動干做,拋出一大堆的exception

          java.sql.SQLException:?索引中丟失??IN?或?OUT?參數::?1
          ????at?oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:
          112)
          ????at?oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:
          146)
          ????at?oracle.jdbc.driver.OraclePreparedStatement.processCompletedBindRow(OraclePreparedStatement.java:
          1681)
          ????at?oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:
          3280)
          ????at?oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:
          3329)
          ????at?org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:
          92)
          ????at?org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:
          139)
          ????at?org.hibernate.loader.Loader.getResultSet(Loader.java:
          1669)
          ????at?org.hibernate.loader.Loader.doQuery(Loader.java:
          662)
          ????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:
          1129)
          ????at?org.hibernate.impl.QueryImpl.list(QueryImpl.java:
          79)
          ????at?org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:
          749)
          ????at?com.phopesoft.hms.room.service.impl.RoomServiceImpl$
          3.doInHibernate(RoomServiceImpl.java:151)
          ????at?org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:
          366)
          ????at?org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:
          334)

          這樣的錯誤真是讓我一點莫不著頭腦,還好從后臺打出的hql看到了錯誤的信息

          org.springframework.jdbc.UncategorizedSQLException:?Hibernate?operation:
          ?could?not?execute?query;?uncategorized?SQLException?
          for?SQL?[
          ?...
          ?SQL?state?[null];?error?code?[17041];?索引中丟失??IN?或?OUT?參數::1;
          ?nested?exception?is?java.sql.SQLException:?索引中丟失??IN?或?OUT?參數::?
          1

          不就是沒找到嗎,干嘛要這樣呢

          將String類型轉換為Integer就沒事了
          ????????this.getHibernateTemplate().execute(new?HibernateCallback()?{
          ????????????
          public?Object?doInHibernate(Session?session)?throws?HibernateException?{
          ????????????????room.setType((RoomType)?session.get(RoomType.
          class,?new?Integer(typeId)));
          ????????????????room.setState((RoomState)?session.get(RoomState.
          class,?new?Integer(stateId)));
          ????????????????session.update(room);
          ????????????????
          return?null;
          ????????????}
          ????????});

          posted @ 2006-05-03 11:16 martin xus| 編輯 收藏

          JBoss 居然不認識webwork的

          在resin和weblogic上跑的很好的程序,今天早上移植到JBoss上?,頁面跑到<ww:if處沒法正常運行,報錯,換成<c:if 就沒有問題了.

          一大早的被郁悶了一下

          posted @ 2006-05-02 13:35 martin xus| 編輯 收藏

          小結一下OpenSessionInView

          感謝javaeye差沙和cac的回復.

          OpenSessionInView默認的FlushMode為

          FlushMode.NEVER?

          可以采用在寫保存更新刪除代碼的時候手動更改FlushMode

          ????????this.getHibernateTemplate().execute(new?HibernateCallback()?{?
          ????????????
          public?Object?doInHibernate(Session?session)?throws?HibernateException?{?
          ????????????????session.setFlushMode(FlushMode.AUTO);?
          ????????????????session.save(user);?
          ????????????????session.flush();?
          ????????????????
          return?null;?
          ????????????}?
          ????????});?

          但是這樣做太繁瑣了,第二種方式是采用spring的事務聲明

          ????<bean?id="baseTransaction"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"?
          ??????????abstract
          ="true">?
          ????????
          <property?name="transactionManager"?ref="transactionManager"/>?
          ????????
          <property?name="proxyTargetClass"?value="true"/>?
          ????????
          <property?name="transactionAttributes">?
          ????????????
          <props>?
          ????????????????
          <prop?key="get*">PROPAGATION_REQUIRED,readOnly</prop>?
          ????????????????
          <prop?key="find*">PROPAGATION_REQUIRED,readOnly</prop>?
          ????????????????
          <prop?key="load*">PROPAGATION_REQUIRED,readOnly</prop>?
          ????????????????
          <prop?key="save*">PROPAGATION_REQUIRED</prop>?
          ????????????????
          <prop?key="add*">PROPAGATION_REQUIRED</prop>?
          ????????????????
          <prop?key="update*">PROPAGATION_REQUIRED</prop>?
          ????????????????
          <prop?key="remove*">PROPAGATION_REQUIRED</prop>?
          ????????????
          </props>?
          ????????
          </property>?
          ????
          </bean>?

          ????<bean?id="userService"?parent="baseTransaction">?
          ????????
          <property?name="target">?
          ????????????
          <bean?class="com.phopesoft.security.service.impl.UserServiceImpl"/>?
          ????????
          </property>?
          ????
          </bean>?

          posted @ 2006-05-01 11:43 martin xus| 編輯 收藏

          為何OpenSessionInView不能同時保存和刪除,郁悶!

          因為lazy的問題,還是采用了OpenSessionInView
          一開始我的web.xml配置文件如下:

          ????<filter>?
          ????????
          <filter-name>opensession</filter-name>?
          ????????
          <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>?
          ????
          </filter>?

          寫了個保存的代碼測試了一下,報如下的錯誤:

          org.springframework.dao.InvalidDataAccessApiUsageException:?Write?operations?
          are?not?allowed?in?read
          -only?mode?(FlushMode.NEVER)?-?turn?your?Session?
          into?FlushMode.AUTO?or?remove?
          'readOnly'?marker?from?transaction?definition?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:
          1076)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate$
          12.doInHibernate(HibernateTemplate.java:616)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:
          366)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:
          614)?
          ????????at?com.phopesoft.security.service.impl.UserServiceImpl.addUser(UserServiceImpl.java:
          40)?
          ????????at?com.phopesoft.security.web.UserAction.add(UserAction.java:
          52)?
          ????????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method)?
          ????????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
          39)?
          ????????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
          25)?
          ????????at?java.lang.reflect.Method.invoke(Method.java:
          585)?
          ????????at?com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:
          365)?
          .?

          在javaeye中搜索了一下,發現了Readonly的帖子,將web.xml修改為如下:

          <filter>?
          ????????
          <filter-name>opensession</filter-name>?
          ????????
          <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>?
          ????????
          <init-param>?
          ????????????
          <param-name>singleSession</param-name>?
          ????????????
          <param-value>false</param-value>?
          ????????
          </init-param>?
          ????
          </filter>?


          保存的代碼順利通過測試,但是刪除的代碼卻不能通過了.出現如下的錯誤:

          org.hibernate.HibernateException:?Illegal?attempt?to?associate?a?collection?
          with?two?open?sessions?
          ????????at?org.hibernate.collection.AbstractPersistentCollection.setCurrentSession(AbstractPersistentCollection.java:
          410)?
          ????????at?org.hibernate.event.def.OnUpdateVisitor.processCollection(OnUpdateVisitor.java:
          40)?
          ????????at?org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:
          101)?
          ????????at?org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:
          61)?
          ????????at?org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:
          55)?
          ????????at?org.hibernate.event.def.AbstractVisitor.process(AbstractVisitor.java:
          123)?
          ????????at?org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:
          72)?
          ????????at?org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:
          790)?
          ????????at?org.hibernate.impl.SessionImpl.delete(SessionImpl.java:
          768)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate$
          25.doInHibernate(HibernateTemplate.java:772)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:
          366)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:
          766)?
          ????????at?org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:
          762)?

          同樣在論壇里面搜索到遇到這個問題的朋友,回帖說去掉singleSession!

          迷惑了

          posted @ 2006-04-30 15:48 martin xus| 編輯 收藏

          Ruby for Rails



          正好這段時間有空,開始研讀rails。本身我沒有ruby基礎,也一直沒有太大的興趣,這本書正好是對沒有ruby基礎人寫的rails教程。

          Thanks manning:)

          posted @ 2006-04-28 10:56 martin xus| 編輯 收藏

          僅列出標題
          共28頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 
          主站蜘蛛池模板: 珲春市| 吴桥县| 崇仁县| 邵东县| 泰来县| 瓮安县| 左贡县| SHOW| 东乡| 溧水县| 通化市| 乡宁县| 松桃| 易门县| 嫩江县| 吉木萨尔县| 冕宁县| 安阳市| 镇巴县| 金寨县| 琼结县| 清徐县| 灵宝市| 彝良县| 台湾省| 客服| 辽阳市| 缙云县| 宜都市| 神农架林区| 周宁县| 苏州市| 崇义县| 齐齐哈尔市| 剑阁县| 青川县| 集贤县| 和政县| 大同市| 遂宁市| 五莲县|