2010-04-26 63 views
0

我遇到了NHibernate的一些问题,当涉及到映射多对多关系,特别是这一个。许多到很多NHibernate

我有一个类别表,每个父母可以拥有尽可能多的孩子,因为它需要,它也可以是父母。

当我尝试选择类别表的东西,我得到一个错误:

错误:42601:“”语法错误或接近

任何机会,你可能会弄清楚为什么抛出这个错误?

非常感谢球员

继承人的选择

System.Collections.IList resultado2 = sessao.Find("select c.IdCategoria,c.NomeCategoria,c.CategoriasFilhas from Categoria c"); 

继承人的表

CREATE TABLE category 
(
    id_cat serial not null, 
    id_cat_p integer not null, 
    nm_cat string (256) not null, 
    ... 
); 

我的C#类

public class Categoria 
{ 
    private int idCategoria; 
    private string nmCategoria; 
    private int nivelCategoria; 
    private int rankCategoria; 

    private IList<Categoria> categoriasFilhas; 

    public virtual int IdCategoria 
    { 
     get { return this.idCategoria; } 
     set { this.idCategoria = value; } 
    } 

    public virtual string NomeCategoria 
    { 
     get { return this.nmCategoria; } 
     set { this.nmCategoria = value; } 
    } 

    public virtual int NivelCategoria 
    { 
     get { return this.nivelCategoria; } 
     set { this.nivelCategoria = value; } 
    } 

    public virtual int RankCategoria 
    { 
     get { return this.rankCategoria; } 
     set { this.rankCategoria = value; } 
    } 

    public virtual IList<Categoria> CategoriasFilhas 
    { 
     get { return this.categoriasFilhas; } 
     private set { this.categoriasFilhas = value; } 
    } 
} 

这里是映射

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="GeoBiblio" namespace="GeoBiblio.Classes.Orm"> 
    <class name="Categoria" table="categoria" discriminator-value="categoria"> 
    <id name="IdCategoria" type="Int32" column="id_categoria" unsaved-value="0" access="property"> 
     <generator class="sequence"> 
     <param name="sequence">categoria_id_categoria_seq</param> 
     </generator> 
    </id> 
    <property name="NomeCategoria" column="nm_categoria" type="String" unique="true"/> 
    <property name="NivelCategoria" column="nivel_categoria" type="Int32"/> 
    <property name="RankCategoria" column="rank_categoria" type="Int32"/> 
    <bag name="CategoriasFilhas" table="categoria" fetch="select" inverse="true" lazy="true"> 
     <key column="id_categoria_pai"/> 
     <many-to-many class="Categoria" column="id_categoria" order-by="rank_categoria"/> 
    </bag> 
    </class> 
</hibernate-mapping> 

回答

2

这可能是因为你的选择语法是SQL,而不是HQL(见下文):

results = session.Find(
     "from nhRegistration.UniversityClass as 
     uc where personid is null"); 
+0

我会尝试哟进一步研究HQL。我仍然是一个新手在休眠:D 谢谢 – 2010-04-26 14:26:35

+0

它现在的作品。谢谢。以下是我正在查找的以下查询: “from Categoria c where c.IdCategoria = 1” 因此只选择父母,并且它是孩子。另一个查询给了我一个所有节点和孩子的列表,重复了一堆信息。 – 2010-04-26 14:38:08

+0

我很高兴它的工作 – Burt 2010-04-26 15:14:46