J'ai entités:chargement Lazy retourne des records égaux
public class Document : PersistentObjectBase
{
public virtual long? FolderId
{
get;
set;
}
}
<id name="Id" column="ID">
<generator class="identity" />
</id>
<version column="VERSION" name="Version" type="Int64" unsaved-value="undefined" />
<property name="FolderId" column="FOLDER" />
public class DocumentFolder : PersistentObjectBase
{
public virtual long? ParentFolderId
{
get;
set;
}
#region [Lazy subfolders]
protected virtual IList<DocumentFolder> NSubFolders
{
get;
set;
}
public virtual IList<DocumentFolder> SubFolders
{
get
{
return GetObjectWithInitializationCheck(NSubFolders);
}
set
{
NSubFolders = value;
}
}
#endregion
#region [Lazy Documents]
protected virtual IList<Document> NDocuments
{
get;
set;
}
public virtual IList<Document> Documents
{
get
{
return GetObjectWithInitializationCheck(NDocuments);
}
set
{
NDocuments = value;
}
}
#endregion
}
où:
protected static T GetObjectWithInitializationCheck<T>(T propertyValue) where T : class
{
if (ObjectInitialized(propertyValue))
{
return propertyValue;
}
return null;
}
<id name="Id" column="ID">
<generator class="identity" />
</id>
<version column="VERSION" name="Version" type="Int64" unsaved-value="undefined" />
<property name="ParentFolderId" column="PARENT_FOLDER_ID" />
<bag name="NSubFolders" lazy="true" cascade="delete">
<key column="PARENT_FOLDER_ID" />
<one-to-many class="DocumentFolder" />
</bag>
<bag name="NDocuments" lazy="true">
<key column="FOLDER" />
<one-to-many class="Document" />
</bag>
Bien que les critères de construction, je fais:
criteria.SetResultTransformer(new DistinctRootEntityResultTransformer());
criteria.CreateCriteria("NSubFolders", "subFolders", JoinType.LeftOuterJoin);
criteria.CreateCriteria("NDocuments", "documents", JoinType.LeftOuterJoin);
La méthode renvoie des dossiers avec des sous-dossiers et documents, mais il est possible de trouver le dossier ou des documents à plusieurs reprises dans les listes. Par exemple, je n'ai que 30 dossiers mais j'en ai environ 180 où il y a un dossier mare que 1 fois. Désolé pour mon pauvre anglais ...
Par exemple .... –
Utilisez simplement Select, n'utilisez aucun type de jointure – Falcon