2010-04-26 5 views
0

J'ai des problèmes avec NHibernate quand il s'agit de mapper de nombreuses relations, spécialement celle-ci.Many To Many NHibernate

J'ai une table de catégories, où chaque parent peut avoir autant d'enfants que nécessaire, et il peut aussi être un parent.

Quand j'essaie de choisir quelque chose à partir du tableau de la catégorie, je reçois une erreur:

ERREUR: 42601: erreur de syntaxe ou à proximité « »

Y a-t-il une chance que vous compreniez pourquoi?

Merci gars de beaucoup

Heres la sélection

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

Heres la table

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

mon C# classe

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; } 
    } 
} 

Et voici la cartographie

<?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> 

Répondre

2

Il se pourrait que votre syntaxe pour la sélection est dans SQL plutôt que HQL (voir ci-dessous):

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

je vais essayer yo Approfondissons HQL. Je suis encore un débutant dans Hibernate: D Merci –

+0

Cela fonctionne maintenant. Je vous remercie. Voici la requête suivante que je cherchais: "de Categoria c où c.IdCategoria = 1" sélectionnant ainsi seulement le parent et ses enfants. L'autre requête m'a donné une liste de tous les nœuds et enfants, répétant un tas d'informations. –

+0

Je suis content que ça a marché – Burt