Lazy="false"反而出错

错误信息:

“System.Configuration.ConfigurationErrorsException”类型的异常在 Spring.Core.DLL 中发生,但未在用户代码中进行处理

其他信息: Error creating context '/hotelmis': Could not find the dialect in the configuration

从错误信息看到是配置文件出了问题,出现dialect的地方只有一个

<property
name="HibernateProperties">
     
<dictionary>
       
<entry key="hibernate.connection.provider"
value="NHibernate.Connection.DriverConnectionProvider"/>

<entry
key="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版本中应该改为:

<entry
key="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 type
mismatches); 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-many
class="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 出错 集合的更多相关文章

  1. Hibernate的集合映射与sort、order-by属性

    [Hibernate]Hibernate的集合映射与sort.order-by属性 常用集合Set.List.Map,相信大家都很熟悉,面试中也会经常问.Set和List都继承了Collection接 ...

  2. Hibernate的集合映射(Set、List、Array、Map、Bag)

    POJOs如下: Customer类------>customer表   Order类对应---------->orders表  customer(1)<-------------- ...

  3. hibernate学习系列-----(9)hibernate对集合属性的操作之Map集合篇

    照旧,先新建一个StudentMap.java实体类,将hobby属性使用map集合接口来存放: package com.joe.entity; import java.util.Map; publi ...

  4. hibernate学习系列-----(8)hibernate对集合属性的操作之Collectioon集合篇

    度过短暂的周末,又到了周一,继续轻松而愉快的学习,紧承以前的学习,继续了解hibernate对集合的操作学习之旅! 在上一篇中,就已经提前说过,这一篇的内容以及下一篇的内容会有很多相似之处,这里就不再 ...

  5. hibernate学习系列-----(7)hibernate对集合属性的操作之List集合篇

    今天要写的内容其实不多,本打算将hibernate对集合的操作的内容直接归结为一篇的,但想一想,还是分开写的比较好,毕竟前面的已经发布出去来了,废话不多说,开始吧! 依旧新建一个StudentList ...

  6. Hibernate映射集合属性

    Hibernate要求持久化集合属性字段必须声明为接口,实际的接口可以是java.util.Set,java.util.Collection,java.util.List,java.util.Map, ...

  7. 1-6 hibernate映射集合属性

    1.集合类框架 以Tree开头都是按顺序,默认情况下是升序排列. 以Linked 开头的都是按插入顺序排列的. 2.在hibernate中要持久化集合属性时必须将其声明为接口,如 private Se ...

  8. Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)

    a:数据库的相关知识: (1):一个表能否有多个主键:不能: (2):为什么要设置主键:数据库存储的数据都是有效的,必须保持唯一性: (3)为什么id作为主键:因为表中通常找不到合适的列作为唯一列,即 ...

  9. Hibernate的集合一对多与多对一

    需求:   部门与员工 一个部门有多个员工;       [一对多] 多个员工,属于一个部门    [多对一] 1.javaBean ——Dept.java package com.gqx.oneto ...

随机推荐

  1. 安装windows phone 7

    本机环境win7 32位旗舰版,本来是4G内存的  系统只能读出2.9G,vs2010中文旗舰版,想搭建windows phone环境学习wp手机开发.安装完了之后明显感觉机器慢了些. ①:安装Mic ...

  2. PHP线程安全和非线程安全有什么区别

    我们先来看一段PHP官网的原话: Which version do I choose? IIS If you are using PHP as FastCGI with IIS you should ...

  3. 第2章 核心C#

    1. 变量 1.1 变量需要遵循的规则: 变量必须初始化 初始化器不能为空 初始化器必须放在表达式中 不能把初始化器设置为一个对象,除非在初始化器中创建了一个新对象 1.2 变量的作用域 只要类在某个 ...

  4. 重置SQLSERVER表的自增列,让自增列重新计数【转】

    很多时候我们需要重置某个表的自增列,让自增列重新从1开始记数.最蠢的方法当然是把该表删掉再重新建表了.其实,还有其它的方法可以重置自增列的值: 方法一:使用TRUNCATE TABLE语句: TRUN ...

  5. 关于dependencies和devDependencies的理解

    npm install 会下载dependencies和devDependencies中的模块,当使用npm install --production或者注明NODE_ENV变量值为productio ...

  6. c++ STL stack容器成员函数

    这是后进先出的栈,成员函数比较简单,因为只能操作栈顶的元素.不提供清除什么的函数. 函数 描述 bool s.empty() 栈是否为空(即size=0).若空,返回true,否则,false. vo ...

  7. tensorflow构建CNN模型时的常用接口函数

    (1)tf.nn.max_pool()函数 解释: tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=No ...

  8. C# checked运算符

    一.C# checked运算符 checked运算符用于对整型算术运算和显式转换启用溢出检查. 默认情况下,表达式产生的值如果超出了目标类型的范围,将会产生两种情况: ?常数表达式将导致编译时错误. ...

  9. kindeditor 上传图片失败问题总结

    1.近段时间一直在处理kindeditor上传图片失败的问题,前期一直以为是前端的问题,利用谷歌控制台,打断点,修改方法,一直都找不到解决方案,直到查看服务器配置,才发现: WEB 1号服务器 /da ...

  10. C语言正整数除法向上取整

    在网上发现一个简单的向上取整方法: 这里我们用<>表示向上取整,[]表示向下取整,那么怎么来表示这个值呢? 我们可以证明: <N/M>=[(N-1)/M]+1    (0< ...