hibernate 出錯 集合

來源:互聯網
上載者:User

標籤:對象   data   asc   是什麼   mail   dll   match   格式   man   

Lazy="false"反而出錯

 

錯誤資訊:

“System.Configuration.ConfigurationErrorsException”類型的異常在 Spring.Core.DLL 中發生,但未在使用者代碼中進行處理

其他資訊: Error creating context ‘/hotelmis‘: Could not find the dialect in the configuration

      從錯誤資訊看到是設定檔出了問題,出現dialect的地方只有一個


   <propertyname="HibernateProperties">
     <dictionary>
       <entry key="hibernate.connection.provider"value="NHibernate.Connection.DriverConnectionProvider"/>
        <entrykey="hibernate.dialect"value="NHibernate.Dialect.MsSql2000Dialect"/>
       <entry key="hibernate.connection.driver_class"value="NHibernate.Driver.SqlClientDriver"/>
       <entry key="hibernate.show_sql"value="true"/>
     </dictionary>
   </property>

 

     這種寫法是用在NHiberate12版本中的,如果在NHiberate21版本中應該改為:

      <entrykey="dialect"value="NHibernate.Dialect.MsSql2005Dialect"/>

 

錯誤資訊:

     命名空間“NHibernate”中不存在類型或命名空間名稱“Expression”(是缺少程式集引用嗎?) 

     命名空間出錯:使用Criteria查詢資料時用,NHiberate12是在NHibernate.Expression中,而NHiberate21是在NHibernate.Criterion中。

 

 

錯誤資訊:

“Spring.Data.NHibernate.HibernateSystemException”類型的異常在Spring.Data.NHibernate21.DLL 中發生,但未在使用者代碼中進行處理

其他資訊: Invalid Cast (check your mapping for property typemismatches); setter of DBLayer.MAP.Accredit.RoleFunction

     這個錯誤光從字面上看是RoleFunction的對應檔中的內容跟類定義的屬性不匹配引起的,實際上不是。是一對多關聯性中一方設定多方集合中的屬性Lazy="false"引起的。因為使用了,所以Lazy="false"反而出錯,其中具體是什麼原因,本人沒有深入的去瞭解。

   <set name="RoleFunctions"table="AC_Role_Function_Test" inverse="false" lazy="true"cascade="all-delete-orphan">
     <key column="RoleID" />
     <one-to-manyclass="DBLayer.MAP.Accredit.RoleFunction,DBLayer"/>
   </set>

 

 

 

Nhibernate 要求model實體類對於lazy="true" ,欄位屬性前需要加 virtual

sqlserver2005和oracle10g的hibernate.cfg.xml如何配置?
A:sqlserver2005配置如下
<!-- NHibernate sqlserver2005配置-->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="db1">
    <!-- properties -->
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.connection_string">
      Server=.;initial catalog=NhibernateTest;User Id=sa;Password=sa
    </property>
    <property name="use_outer_join">true</property>
    <property name="use_proxy_validator">true</property>
    <!--<property name="show_sql">false</property>-->
    <!--<property name="query.substitutions">true 1, false 0, yes ‘Y‘, no ‘N‘</property>-->
    <!-- mapping files -->
    <mapping assembly="Kang.Model" />
  </session-factory>
</hibernate-configuration>

Oracle10g配置如下:
<!-- NHibernate Oracle10g配置-->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="db1">
    <!-- properties -->
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver&lt</property>
    <property name="dialect">NHibernate.Dialect.Oracle9Dialect&lt</property>
    <property name="connection.connection_string">
      data source=KANGSHI;User ID=huobj;Password=huobj
    </property>
    <property name="use_outer_join">true</property>
    <property name="use_proxy_validator">true</property>
    <!--<property name="show_sql">false</property>-->
    <!--<property name="query.substitutions">true 1, false 0, yes ‘Y‘, no ‘N‘</property>-->
    <!-- mapping files -->
    <mapping assembly="Kang.Model" />
  </session-factory>
</hibernate-configuration>


Q:無法將類型為“NHibernate.Dialect.MsSqlCeDialect”的對象強制轉換為類型“NHibernate.Driver.IDriver”。
A:當切換資料庫時,相應的connection.driver_class屬性是需要調整
  oracle10g是NHibernate.Driver.OracleClientDriver
  MsSql2005是NHibernate.Driver.SqlClientDriver

Q:could not execute query
A:總的原則是,Nhibernate查詢還是遵守sql原規則的。
1 欄位名稱不對,
2 欄位格式不對,注意日期、數字和字元
3&lt;property type="string" length="50" name="RoleName" column="[RoleName]" /&gt;
oracle必須把RoleName的[]去掉。而sqlsever去不用去[]都行。
 

Q:The type System.Int32 can not be assigned to a property of type System.String setter of Kang.Model.Entities.USR_UserInfo.LoginID
A: 主鍵LoginID原定義的是int ,應該改成string

Q:Invalid Cast (check your mapping for property type mismatches); setter of Kang.Model.Entities.USR_UserInfo
A:length="80" 必須小於資料庫表中欄位的長度。另外,就是實體類中屬性類的類型要和nhibernate-mapping 中的type同。

 

因為是在調用GetAll()方法是報的錯,那我就一個屬性一個屬性的去掉,來調用這個方法,看究竟是哪個屬性的類型不符。最終定位到一個枚舉類型,在 實體類裡定義該屬性為枚舉類型,但是在對應檔中使用的卻是String類型,因此報錯。因為枚舉類型可以以String類型在資料庫中儲存,因此將實體 類中該類型改為String,編譯運行,好了。

 

 

 

 

Q:資料庫中的Date、DateTime和TimeStamp類型區別?
A:
DATETIME, DATE和TIMESTAMP類型是相關的。本文描述他們的特徵,他們是如何類似的而又不同的。
DATETIME類型用在你需要同時包含日期和時間資訊的值時。MySQL檢索並且以‘YYYY-MM-DD HH:MM:SS‘格式顯示DATETIME值,支援的範圍是‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘。(“支援”意味著儘管更早的值可能工作,但不能保證他們可以。)
DATE類型用在你僅需要日期值時,沒有時間部分。MySQL檢索並且以‘YYYY-MM-DD‘格式顯示DATE值,支援的範圍是‘1000-01-01‘到‘9999-12-31‘。
TIMESTAMP列類型提供一種類型,你可以使用它自動地用當前的日期和時間標記INSERT或UPDATE的操作。如果你有多個TIMESTAMP列,只有第一個自動更新。

SqlDateTime 溢出。必須介於 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間。
滴答數必須介於 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之間。
參數名: ticks
A:實體類中這樣定義就ok了  private DateTime _CreateDate = new DateTime(2009 - 9 - 9);

 

 
   Q:有的哥們這麼寫,但是問題是麻煩。
             var whitelist = new[] { "UserId", "UserName", "UserParssord", "UserMail" };
                UpdateModel(user, whitelist);
                uService.UpdateUserInfo(user);
                return RedirectToAction("Index");
A:     可以這樣寫
               model = bll.GetModel(id);
                UpdateModel(model);
                bll.UpdateData(model);
                return RedirectToAction("Index")

父子表關聯映射 ============================================== 
Q: 使用者代碼未處理 NHibernate.PropertyAccessException
  Message="Invalid Cast (check your mapping for property type mismatches); setter of Kang.Model.Entities.USR_UserInfo"
  Source="Kang.NHibernateHelper"
  A:<!--多對一關聯性:Users屬於一個Role-->
  <many-to-one name="RoleID" column="RoleID" not-null="true" class="Kang.Model.Entities.RoleInfo" foreign-key="FK_RoleUsers" />

   <!--一對多關聯性:Role有一個或多個Users-->
    <set name="Users" table="`USR_UserInfo`" generic="true" inverse="true">
      <key column="RoleInfo" foreign-key="FK_RoleUsers"/>
      <one-to-many class="Kang.Model.Entities.USR_UserInfo"/>
    </set>
 
 Q:Duplicate property mapping of RoleID found in Kang.Model.Entities.USR_UserInfo
 A:有重複的屬性定義。屬性對象化,頁面調用顯示時可以再調用屬性的屬性,如:model.RoleID.RoleName

Q:Could not initialize proxy - the owning Session is disconnected
 A:對於父子關聯表,把lazy="false"

hibernate 出錯 集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.