Nhibernate基础
Nhibernate(英文冬眠的意思) 常用方法 |
Contains Evict Clear |
||||||||||||||||
在 NHibernate 中一切必须是 Virtual 的吗? |
http://www.cnblogs.com/aaa6818162/p/4675279.html http://blog.zhaojie.me/2009/09/my-view-of-nhibernate-2-virtually-everything.html 因此,如果是你的话,在写Java代码的时候,是愿意使用getXxx()这样的方法,还是直接访问类中的私有字段?因此我认为,是Java语言的特性,导致Java开发人员倾向于直接访问类中的私有字段,从而导致Hibernate需要避免未加载的私有字段,进一步导致Hibernate的代理类会去覆盖所有的公开方法(只有方法,因为Java语言没有“属性”)——最终,由于NHibernate在“统一大业”上的策略,使得我们.NET开发人员也必须把所有成员标记为virtual,无论是方法还是属性。
|
||||||||||||||||
Nhibernate API |
http://www.cnblogs.com/aaa6818162/p/4639308.html
下图描述了NHibernate的API在分层架构中的作用,下面将进行详细说明。 NHibernate的接口大致分为四类: 1. 被应用程序调用进行基本数据操作(增、删、改、查)的接口。这些接口是应用程序的业务逻辑层和控制层与NHibernate的主要交互点。ISession, ITransaction, IQuery和ICriteria属于此类。 2. 被应用程序用来配置NHibernate的接口。Configuration就属此类。 3. 回调接口。应用程序用回调接口来响应NHibernate中触发的事件。这类接口包括Interceptor, ILifecycle和IValidatable等。 4. 用于扩展NHibernate的强大映射功能的接口。这类接口通常被应用程序的基础架构来实现。IUserType, ICompositeUserType, 和IIdentifierGenerator属于此类。 |
||||||||||||||||
NHibernate Interceptor机制 |
nhibernate是如何自动生成sql语句的 NHibernate 查看生成的sql语句:
http://www.cnblogs.com/jiezhi/articles/87414.html http://www.cnblogs.com/JeffreyZhao/archive/2009/10/13/my-view-of-nhibernate-4-interceptor.html |
||||||||||||||||
NHibernate中Session是线程不安全(多线程中Session不能被共享) | http://www.cnblogs.com/aaa6818162/p/4631412.html | ||||||||||||||||
Nhibernate 设置派生属性 |
http://www.cnblogs.com/cnjava/archive/2012/07/21/2602294.html
|
||||||||||||||||
关系数据库中的主键可分为 自然主键(具有业务含义)和代理主键(不具有业务含义) | |||||||||||||||||
Nhibernate锁 数据并发 版本号 | http://www.cnblogs.com/lyj/archive/2008/10/21/1316269.html
|
||||||||||||||||
Nhibernate 一级缓存 |
|||||||||||||||||
NHibernate的Session管理策略 | http://www.cnblogs.com/13yan/archive/2013/05/17/3083552.html
1)在Web应用程序中 一个请求中第一次会打开一个Session并保存再web上下文,以后就不再新打开了 2)在WinForm或单元测试中,使用另一种策略,每个线程用一个Session。 修改hibernate.cfg.xml配置文件,加入一个属性<property name="current_session_context_class">web</property>,修改这个属性就可以修改Session策略。 sessionFactory = new Configuration().Configure() |
||||||||||||||||
NHibernate 怎么样去为我们的实体类设置一个通用的基类 | http://www.cnblogs.com/aaa6818162/p/4631443.html | ||||||||||||||||
hibernate session的flushMode的区别 |
http://blog.csdn.net/looyo/article/details/6309136
http://stackoverflow.com/questions/3295169/nhibernate-flushmode-auto-not-flushing-before-find
session.flushmode=auto
/// <summary>
Cardtype entity2 = session
entity.Cardtypename = "66";
|
||||||||||||||||
NHibernate中Get和Load的区别 | 1.get()采用立即加载方式,而load()采用延迟加载; get()方法执行的时候,会立即向数据库发出查询语句, 而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句 2.如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException 如果加载一个对象的目的是威力访问它的属性,可以用get方法 如果加载一个对象的目的是为了删除它,或者是为了建立于别的对象的关联,可以用load |
||||||||||||||||
域对象在持久化层的三种状态 |
临时状态(Transient):当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存 区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据 与数据库没有任何关系,除非通过Session的save或者SaveOrUpdate把临时对象与数据库 关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象。
持久状态(Persistent): 持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对 象进行delete操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再 存在对应关系,持久化对象变成临时状态。持久化对象被修改变更后,不会马上同步到数 据库,直到数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。
游离状态(Detached):当Session进行了Close、Clear或者evict后,持久化对象虽然拥有持久化标识符和与数据 库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离 状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有 持久化标识。
总结:我们现在系统默认取出来的对象一直在持久状态 因为session绑定的web上线文 只有请求结束才进行session的close protected void Application_BeginRequest(object sender, EventArgs e) protected void Application_EndRequest(object sender, EventArgs e) |
||||||||||||||||