隨筆-1  評論-68  文章-98  trackbacks-0

          1/ 數據庫驅動

             1.1/ Oracle
                  jdbc驅動需要注意版本,class111.jar;o_jdbc.jar。
             1.2/ MS SQL Server
                  注意版本和網絡配置(tcp和管道的權限)。
                  官方驅動:2000,3個jar包;2005,一個jar包。
                  jrds驅動:評價普遍比官方的好,注意各個版本。
             1.3/ MySQL

          2/ 數據庫連接/session

             2.1/ hibernate.cfg.xml配置jdbc驅動
             2.2/ hibernate.cfg.xml配置datasource
             2.3/ 在獲取session時加載Connection
                  struts的datasource
                  web server的datasource
                  dbcp的datasource

          3/ 事務Transaction 與 commit
           
             一次事務只可以提交一次,多次提交會報錯。
             javax.servlet.ServletException: JDBC commit failed

          4/ 一張表轉換成了2個對象,修正為一個對象

             4.1 修改*.hbm.xml,去除composite-id標簽,將主鍵對應的key-property改為id,其它key-property改為property;
             4.2 刪除*.java和Abstract*.java,將*Id.java和Abstract*Id.java分別重構為*.java和Abstract*.java;
             4.3 修改*DAO.jar,將findById的參數修正為主鍵的類型,注意與*.hbm.xml匹配。

          修改前:

          < hibernate-mapping >
              
          < class  name ="com.inc.xschool.entity.PositionInfo"  table ="POSITION_INFO"  schema ="dbo"  catalog ="xschool" >
                  
          < composite-id  name ="id"  class ="com.inc.xschool.entity.PositionInfoId" >
                      
          < key-property  name ="positionId"  type ="java.lang.Long" >
                          
          < column  name ="POSITION_ID"   />
                      
          </ key-property >
                      
          < key-property  name ="positionName"  type ="java.lang.String" >
                          
          < column  name ="POSITION_NAME"  length ="50"   />
                      
          </ key-property >
                      
          < key-property  name ="custId"  type ="java.lang.String" >
                          
          < column  name ="CUST_ID"  length ="50"   />
                      
          </ key-property >
                  
          </ composite-id >
              
          </ class >
          </ hibernate-mapping >

          修改后:
          <hibernate-mapping>
              
          <class name="com.inc.xschool.entity.PositionInfo" table="POSITION_INFO" schema="dbo" catalog="xschool">
                  
          <id name="positionId" type="java.lang.Long">
                      
          <column name="POSITION_ID" precision="2" scale="0" />
                      
          <generator class="assigned"></generator>
                  
          </id>
                  
          <property name="positionName" type="java.lang.String">
                      
          <column name="POSITION_NAME" length="50" />
                  
          </property>
                  
          <property name="custId" type="java.lang.String">
                      
          <column name="CUST_ID" length="50" />
                  
          </property>
              
          </class>
          </hibernate-mapping>

          5/ 遞增字段(整型)
             5.1 Oracle  <generator class="sequence">SEQ_NAME</generator>
             5.2 MySQL  <generator class="increment"/>
             5.3 SQL SERVER <generator class="identity"/>

          6/ MS SQL SERVER Exception

          6.1 [Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes
          jdbc bug,text字段的值設為了空或'',改成' '即可,2005中也許修正此bug。

          6.2 [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.
          在手工事務模式 (AutoCommit=false) 下,如果使用直接 (SelectMethod=direct) 模式,當您嘗試對使用 JDBC 驅動程序的 SQL Server 數據庫執行多個語句時,將會出現此問題。直接模式是該驅動程序的默認模式。
          url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=whm;SelectMethod=cursor

          6.3 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
              com.microsoft.sqlserver.jdbc.SQLServerException: 到主機  的 TCP/IP 連接失敗。

          客戶端:10.170.10.2; WinXP SP2; SQL Server 2000(SP4)
          服務端:10.170.10.3; Win2003 Server; SQL Server 2000(SP4)

          1/ Microsoft SQL Server 2000 Driver for JDBC(Service Pack 1)
          msbase.jar;mssqlserver.jar;msutil.jar

          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
          String url  = "jdbc:microsoft:sqlserver://10.170.10.3:1433;DatabaseName=xschool";

          java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
           at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
           at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
           at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
           at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
           at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
           at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
           at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
           at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
           at java.sql.DriverManager.getConnection(DriverManager.java:512)
           at java.sql.DriverManager.getConnection(DriverManager.java:171)
           at com.inc.xchool.test.TestJDBC.main(TestJDBC.java:31)

          2/ Microsoft SQL Server 2005 JDBC Driver
          sqljdbc.jar

          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
          String url  = "jdbc:sqlserver://10.170.10.3:1433;DatabaseName=xschool";

          com.microsoft.sqlserver.jdbc.SQLServerException: 到主機  的 TCP/IP 連接失敗。 java.net.ConnectException: Connection timed out: connect
           at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
           at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source)
           at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source)
           at java.sql.DriverManager.getConnection(DriverManager.java:512)
           at java.sql.DriverManager.getConnection(DriverManager.java:171)
           at com.inc.xchool.test.TestJDBC.main(TestJDBC.java:34)

          3/ Win的數據源(ODBC),系統DSN
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
          可以建立連接

          解決方法:在10.3的防火墻設置中開通1433的TCP權限。
          SQL SERVER TCP 1433

          6.4 org.eclipse.core.internal.resources.ResourceException: A resource exists with a different case: /ok/hibernate.reveng.xml.
          狀況:新建了2個web項目,一個叫ok,一個叫okadmin,都添加了hibernate關聯,后者反轉數據庫結構的時候,eclipse在.log中留下以上的log。
          解決方法:臨時remove另外一個項目。

          6.5 ORA-01461 can bind a LONG value only for insert into a LONG column
          狀況:JDBC驅動與連接的Oracle數據庫版本不一致。
          解決方法:置換JDBC驅動為Oracle系統自帶的。

          posted on 2007-02-08 15:51 Xu Jianxiang 閱讀(1832) 評論(1)  編輯  收藏 所屬分類: Open Source

          評論:
          # re: Hibernate FAQ 2009-10-09 10:19 | ajaxor
          剛好解決我的問題,謝謝!

          可惡的windows防火墻~  回復  更多評論
            
          主站蜘蛛池模板: 博爱县| 山阳县| 三河市| 金溪县| 南开区| 太谷县| 嘉峪关市| 靖安县| 宜都市| 礼泉县| 通榆县| 繁峙县| 辉南县| 于都县| 龙游县| 奉贤区| 建瓯市| 丰镇市| 英超| 大厂| 宜州市| 平和县| 静海县| 垫江县| 鹤岗市| 山阳县| 岳阳县| 花莲市| 淮阳县| 张家川| 广饶县| 达孜县| 黄骅市| 巫溪县| 崇文区| 富裕县| 凤城市| 祁门县| 长乐市| 高唐县| 桓台县|