2

我有两张桌子:

-- Table: medibv.btdbn

-- DROP TABLE medibv.btdbn;

CREATE TABLE medibv.btdbn
(
  mabn varchar(8) NOT NULL,
  hoten text,
  ngaysinh timestamp,
  namsinh varchar(4),
  phai numeric(1) DEFAULT 0,
  mann varchar(2),
  madantoc varchar(2),
  sonha varchar(15),
  thon text,
  cholam text,
  matt varchar(3),
  maqu varchar(5),
  maphuongxa varchar(7),
  userid numeric(5) DEFAULT 0,
  ngayud timestamp DEFAULT now(),
  hotenkdau text,
  nam text,
  image bytea,
  barcode bytea,
  CONSTRAINT pk_btdbn PRIMARY KEY (mabn) USING INDEX TABLESPACE medi_index,
  CONSTRAINT fk_btdbn_btddt FOREIGN KEY (madantoc)
      REFERENCES medibv.btddt (madantoc) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL,
  CONSTRAINT fk_btdbn_btdnn_bv FOREIGN KEY (mann)
      REFERENCES medibv.btdnn_bv (mann) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL,
  CONSTRAINT fk_btdbn_btdpxa FOREIGN KEY (maphuongxa)
      REFERENCES medibv.btdpxa (maphuongxa) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL,
  CONSTRAINT fk_btdbn_btdquan FOREIGN KEY (maqu)
      REFERENCES medibv.btdquan (maqu) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL,
  CONSTRAINT fk_btdbn_btdtt FOREIGN KEY (matt)
      REFERENCES medibv.btdtt (matt) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL
) 
WITH OIDS;
ALTER TABLE medibv.btdbn OWNER TO medisoft;

-- Table: medibv.benhandt

-- DROP TABLE medibv.benhandt;

CREATE TABLE medibv.benhandt
(
  mabn varchar(8),
  mavaovien numeric(18) DEFAULT 0,
  maql numeric(18) NOT NULL DEFAULT 0,
  makp varchar(2),
  ngay timestamp,
  dentu numeric(1) DEFAULT 0,
  nhantu numeric(1) DEFAULT 0,
  lanthu numeric(3) DEFAULT 0,
  madoituong numeric(2) DEFAULT 0,
  chandoan text,
  maicd varchar(9),
  mabs varchar(4),
  sovaovien varchar(10),
  loaiba numeric(3) DEFAULT 0,
  userid numeric(5) DEFAULT 0,
  ngayud timestamp DEFAULT now(),
  cschandoan text,
  CONSTRAINT pk_benahndt PRIMARY KEY (maql),
  CONSTRAINT fk_benhandt_btdkp_bv FOREIGN KEY (makp)
      REFERENCES medibv.btdkp_bv (makp) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL,
  CONSTRAINT fk_benhandt_doituong FOREIGN KEY (madoituong)
      REFERENCES medibv.doituong (madoituong) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE SET NULL
) 
WITH OIDS;
ALTER TABLE medibv.benhandt OWNER TO medisoft;

我将 NHibernate 与 C# 一起使用,并创建了两个类:BtdbnBenhandt

我想在Ilist下面得到一个类似的 sql:

hql= "select tdbn.mabn, badt.mavaovien " +
    "from btdbn tdbn " +
    "     inner join benhandt badt on tdbn.mabn = badt.mabn";
4

3 回答 3

1

HQL 适用于类,而不适用于表。因此,您必须编写一个 HQL 查询,在其中查询映射到这两个表的类。如果您想通过 hql 查询返回无法由您的类之一(由 NHibernate 映射的实体类)表示的数据,那么您必须创建一个 DTO 类。此类具有将包含查询检索到的值的属性。为了能够做到这一点,您必须“导入”该类。

然后,您可以执行以下操作:

select new MyDTO(tdbn.mabn, badt.mava) from btdn tdbn inner join tdbn.mabn
于 2009-04-27T08:24:35.910 回答
0

Medisoft 这个名字引起了我的注意。我没有使用 HCL 的经验,但我想我会提到检查Advantage Database 开发人员站点

于 2012-01-24T21:02:29.970 回答
0

HQL 支持查询投影,因此您可以在不使用 DTO 的情况下编写查询:

var q = session.CreateQuery("select p.Name, p.TaxCode from Publisher p")
                    .List();

如果你想使用 DTO,你必须告诉 NH 在哪里可以找到 DTO 类。只需将导入元素添加到您的映射中:

<import class="ConsoleApplication2.PublisherDto" />
于 2012-01-25T08:53:00.757 回答