NHibernate使用–进阶篇(多表查询)

实质上现在网上supervisor的课程有成千上万,比较杂,我找了几乎只对本身的话是起拉的科目,再成自己之明亮做有记,可以供自己从此翻看。

以出的历程遭到我们总是会逢多表操作的需要,今天自我分享一个关于查询的办法,

链接:https://www.cnblogs.com/Hai–D/p/5820718.html

前言:在运用NHibernate中,需要将用户表(Users)、部门表明(Departments),链表查询,在网上搜索了众多资料,可以当布局文件中配备相应的特性上涉的成效,一对准多、多对同、多针对性几近之点子,但是使用后发现有些艰难,尤其时刚刚开接触NHibernate,有有限难了解,现在自己以同样栽新的法,使用我们最熟悉的SQL来完成相关力量

           http://blog.csdn.net/xyang81/article/details/51555473

 

奇迹在linux上之先后要待统一保管,这时候supervidor就格外好用,在windowns上操作就充分好。

1.0 首先我们要把环境布置好,请参考我面前的随笔,

首先:

2.0 我们于NHibernateSample中定义一个艺术

一、安装supervisor

图片 1图片 2

1.wget
https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz

/// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        public IList<Object> GetCustomers()
        {
            return Session.CreateSQLQuery("select  A.*,B.* from Users A ,Departments B WHERE A.Dept_id = B.dept_id")
                .AddEntity(typeof(Users)).AddEntity(typeof(Departments)).List<Object>();

            //return Session.QueryOver<MyDepartments>().List();
        }

2.tar zxf supervisor-3.3.1.tar.gz

询问方式

3.cd supervisor-3.3.1

  

4.python setup.py install       

  正而达到图所属我们下了连表查询,
这个时刻查询出来的结果是有限摆表的共用交集
包含有的字段,随后我们于后面使用.AddEntity(typeof(Users)),NHibernateSample会在编译的上取得我们传入的品种,随即找到呼应的部署文件,根据部署文件相应的布置,就足以将我们的接近吃之字段和数据库查询结果的字段一一对应
,然后生成对应的结果集,最后咱们输出.List<Object>();
这样便获得了连表查询的结果,那么我们欠怎么使用她呢?返回下的结果集而是啊体统的吗?

而报错可能:

 图片 3

  1. 提醒setuptools-0.6c11.tar不曾设置

    下载https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
    tar zxf setuptools-0.6c11.tar.gz
    cd setuptools-0.6c11/
    python setup.py build
    python setup.py  install
    
  2. 提示下充斥错误,需meld3>0.6.5

    1. 下载 http://dl.fedoraproject.org/pub/epel/7/x86\_64/p/python-meld3-0.6.10-1.el7.x86\_64.rpm(或者我[备份了一份](https://files.cnblogs.com/files/Hai–D/python-meld3-0.6.10-1.el7.x86_64.zip))
    2. 安装 rpm -ivh python-meld3-0.6.10-1.el7.x86_64.rpm

 

一般来说提示,安装完成:

回到下的结果集的范:NHibernateSample将数据库被的一条龙数对应到我们加的实体类对象,因此集合中列一个目标又带有两只目标一个凡单位属性/值的集,另一个凡用户属性/值的聚众
 

Using /usr/lib64/python2.7/site-packages

图片 4

Finished processing dependencies ``for supervisor==3.3.1

 

 

拖欠如何使用其
:手动的拼装返回的结果集

 

图片 5图片 6

二、配置supervisor

//创建一个操作类对象  这里还记得嘛?我们在NHibernateSample操作类的构造函数中声明了一个ISession的参数 这里我们调用帮助类的GetSession()方法返回一个ISession
            NHibernateSample _sample = new NHibernateSample(new NHibernateHelper().GetSession());


            //声明一个对象的集合  由于是多对一的关系 所以我在用户类中自定义了一个部门类型的属性字段
            List<Users> list_u = new List<Users>();

            //存放数据库返回的查询结果
            IList<Object> list_o = _sample.GetCustomers();

            //这里因为返回的是Object类型 所以只能用for循环 不能使用foreach
            for (int i = 0; i < list_o.Count; i++)
            {
                //获取集合中的对象
                Object[] isu_d = (Object[])_sample.GetCustomers()[i];

                //将当前对象中的第一个用户属性/值的对象集合插入到U对象中
                Users u = (Users)isu_d[0];

                //将当前对象中的第二个部门属性/值的对象集合插入到U对象的Departments(相应的部门类型属性 上面提到过的)中
                u.Departments = (Departments)isu_d[1];
                //添加到集合中
                list_u.Add(u);
            }
            //最后返回的就是 用户的集合list_u  在用户中的属性Departments包含了相对应的部门信息
            list_u.Count();

1.创文件夹和安排文件

动用返回的结果集

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

 

2.修改 /etc/supervisor/supervisord.conf 文件

结束了———

先期新建 mkdir
/etc/supervisor/conf.d  以后程序的布置都在斯文件夹里面,以
.ini 结尾

 

图片 7

修改files的路子也达成图所显示。这样安排后,会念取conf.d中的文本。

3.supervisorctl reload
要是配置文件生效

4.在conf.d中创建****.ini文件,创建了后supervisorctl update 使之生效

 ini文件被,可以按以下配置,以下是自有程序的配置,你只要怎么安排可以拘留这首文书:http://blog.csdn.net/xyang81/article/details/51555473
其实为就是是supervisord.conf配置中的解读,网上还有进一步详实的求证,问度娘。

[program:hsparser2]
command=python main_2.py
process_name=hsparser2-%(process_num)s
numprocs=10
directory=/home/hsparser2/
autostart=true
autorestart=unexpected
redirect_stderr=true

 保存退出即可。

5.配备起界面的supervisor来监督程序的运作状态

 图片 8

 保存退出即可,然后以公的windows上,输入你服务器的 ip:9001 就可以看到如下图:

图片 9

这样您就是布局好您的程序在supervisor上了,大功告成。

 

老三、问题放在心上:

1.万一起以下问题

 图片 10

想必是由supervisord进程停止了,建议再运行

运转此命令:supervisord -c
/etc/supervisor/supervisord.conf