每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開(kāi)發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點(diǎn)是:顛覆軟件

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評(píng)論 :: 0 Trackbacks
          keyword:MySql字段,Hibernate session

          一.MySql字段敏感

          這幾天怪問(wèn)題真是不少,這不剛建的一個(gè)數(shù)據(jù)庫(kù)的表用MiddleGen批量生成hbm.xml文件居然和數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型不一致.
          MySql建表語(yǔ)句如下:
          drop table if exists book;

          /*==============================================================*/
          /* Table: book                                                  */
          /*==============================================================*/
          create table book
          (
             id                             
          int                            not null,
             name                           
          varchar(100),
             author                         
          varchar(100),
             date                           date,
             price                          
          int,
             
          primary key (id)
          )
          comment
          ="Book table"
          type 
          = InnoDB;

          生成的hbm.xml文件如下:

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
              "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" 
          >
              
          <hibernate-mapping>
          <!-- 
              Created by the Middlegen Hibernate plugin 2.1

              http://boss.bekk.no/boss/middlegen/
              http://www.hibernate.org/
          -->

          <class 
              
          name="net.foxlog.prj.Book" 
              table
          ="book"
          >
              
          <meta attribute="class-description" inherit="false">
                 @hibernate.class
                  table="book"
              
          </meta>

              
          <id
                  
          name="id"
                  type
          ="java.lang.Long"
                  column
          ="id"
              
          >
                  
          <meta attribute="field-description">
                     @hibernate.id
                      generator-class="assigned"
                      type="java.lang.Long"
                      column="id"


                  
          </meta>
                  
          <generator class="assigned" />
              
          </id>

              
          <property
                  
          name="name"
                  type
          ="java.lang.String"
                  column
          ="name"
                  length
          ="100"
              
          >
                  
          <meta attribute="field-description">
                     @hibernate.property
                      column="name"
                      length="100"
                  
          </meta>    
              
          </property>
              
          <property
                  
          name="author"
                  type
          ="java.lang.String"
                  column
          ="author"
                  length
          ="100"
              
          >
                  
          <meta attribute="field-description">
                     @hibernate.property
                      column="author"
                      length="100"
                  
          </meta>    
              
          </property>
              
          <property
                  
          name="date"
                  type
          ="java.sql.Date"
                  column
          ="date"
                  length
          ="10"
              
          >
                  
          <meta attribute="field-description">
                     @hibernate.property
                      column="date"
                      length="10"
                  
          </meta>    
              
          </property>
              
          <property
                  
          name="price"
                  type
          ="java.lang.String"
                  column
          ="price"
                  length
          ="10"
              
          >
                  
          <meta attribute="field-description">
                     @hibernate.property
                      column="price"
                      length="10"
                  
          </meta>    
              
          </property>

              
          <!-- Associations -->
            

          </class>
          </hibernate-mapping>

          注意到?jīng)]有,id的類(lèi)型變成了Long型了,而price居然變成了String了,暈啊.

          各位碰到過(guò)這個(gè)問(wèn)題么?

          最后還是找到問(wèn)題所在了,實(shí)際上是建表有問(wèn)題,問(wèn)題就出在字段的名稱(chēng)上,把id改為ID,price改為PRICE就沒(méi)問(wèn)題了!  MySql對(duì)id和price敏感? 不得而知,目前看來(lái)好像是這樣.只是提醒我以后建表養(yǎng)成一個(gè)習(xí)慣,都用大寫(xiě)的就沒(méi)問(wèn)題了.
          沒(méi)想到一次測(cè)試中隨便建的一個(gè)表發(fā)現(xiàn)了這么個(gè)有趣的事情  :)

          二.Hibernate的session關(guān)閉問(wèn)題
          用hibernate的工具類(lèi)獲得session有沒(méi)有碰到過(guò)session is closed的錯(cuò)誤提示? 我又幸運(yùn)的碰到這個(gè)問(wèn)題了,呵呵,我怎么有那么多問(wèn)題啊,暈了,我看來(lái)是問(wèn)題先生了,我的一個(gè)同事上次也跟我說(shuō)過(guò)這個(gè)事情,后來(lái)他沒(méi)有正面解決這個(gè),繞過(guò)去了,他用Spring去替自己解決了,呵呵,也夠狠的.不過(guò)問(wèn)題實(shí)際上是獲得session的時(shí)候需要增加一個(gè)判斷. 即 session.isOpen() == false;
           
          DBUtil.java代碼如下:
          /**
               * 返回一個(gè)可用的數(shù)據(jù)庫(kù)Session連接
               * 
          @return Hibernate中對(duì)數(shù)據(jù)庫(kù)的Session連接
               * 
          @throws HibernateException
               
          */
              
          public static Session currentSession() throws HibernateException
              {
                  Session s 
          = (Session) session.get();
                  
          // Open a new Session, if this Thread has none yet
                  if (null==|| s.isOpen()==false)//注意這里
                  {
                      s 
          = sessionFactory.openSession();
                      session.set(s);
                  }
                  
          return s;
              }


          posted on 2006-02-24 00:25 Alex 閱讀(1376) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java
          主站蜘蛛池模板: 武威市| 南川市| 敖汉旗| 大城县| 晋城| 紫金县| 尚志市| 云龙县| 安吉县| 都江堰市| 西丰县| 白水县| 泰宁县| 玉环县| 罗田县| 布尔津县| 福鼎市| 宁德市| 伊春市| 隆安县| 绥德县| 呈贡县| 芦山县| 洛隆县| 柘城县| 扬中市| 黄浦区| 天津市| 金昌市| 石门县| 涿州市| 邵阳县| 乳源| 岑巩县| 泰来县| 县级市| 沧州市| 固镇县| 连江县| 新蔡县| 阳江市|