Hello again,
I think my last Post didn't describe the problem detailed enough. So I
will amend some facts that might be very helpful.
In fact I got this relationship to work in a way, but not the way I
expected.
Now I am able to map these three entities like this:
-----------------------------------
public class Application {
...
public virtual IDictionary<UserGroup, Permission> GroupPermissions
{get; set;}
}
-----------------------------------
But in fact the logic I try to implement should be like this.
-----------------------------------
public class Application {
...
public virtual IDictionary<UserGroup, IList<Permission>>
GroupPermissions {get; set;}
}
-----------------------------------
Is it possible to build up a mapping like this in nhibernate and would
someone be so kind to explain it to me.
Thanks in advance.
Maik
On 8 Apr., 08:43, Maik Schöneich <[email protected]> wrote:
> Hello there,
>
> i'm having heavy trouble getting my ternary association to work. I
> tryed the way which is shortly described in the
> nh-reference:http://www.nhforge.org/doc/nh/en/index.html#collections-ternary
>
> I set up the mapping for my classes like this (using
> NHibernate.Mapping.Attributes):
>
> Application.cs:
> -------------------
> [Class(0, Table = "APPLICATION")]
> public class Application
> {
> private long id;
> private string name;
> private string assemblyGuid;
>
> private IDictionary< AdGroup, Permission > groupPermissions =
> new Dictionary< AdGroup, Permission >();
>
> /// <summary>
> /// Id der Anwendung
> /// </summary>
> [Id(0, TypeType = typeof(long), Column = "ID", Name = "Id",
> UnsavedValue = "0")]
> [Generator(1, Class = "native")]
> [Param(2, Name = "sequence", Content = "APPLICATION_ID_SEQ")]
> public virtual long Id
> {
> get
> {
> return this.id;
> }
> set
> {
> this.id = value;
> }
> }
>
> /// <summary>
> /// Assembly-Name der Anwendung
> /// </summary>
> [Property(0, Column = "NAME", Name = "Name", TypeType = typeof
> (string), NotNull = true)]
> public virtual string Name
> {
> get
> {
> return this.name;
> }
> set
> {
> this.name = value;
> }
> }
>
> /// <summary>
> /// Guid der Assembly
> /// </summary>
> [Property(0, Column = "ASSEMBLY_GUID", TypeType = typeof
> (string), Name = "AssemblyGuid")]
> public virtual string AssemblyGuid
> {
> get
> {
> return this.assemblyGuid;
> }
> set
> {
> this.assemblyGuid = value;
> }
> }
>
> [Map(0, Table = "GROUP_APPLICATION_PERMISSION", Lazy = false,
> Inverse = true, Cascade = "all")]
> [Key(1, Column = "APPLICATION_ID")]
> [IndexManyToMany(2, Column = "AD_GROUP_ID", ClassType = typeof
> (AdGroup))]
> [ManyToMany(3, ClassType = typeof(Permission), Column =
> "PERMISSION_ID", Fetch = FetchMode.Join, Lazy =
> RestrictedLaziness.False)]
> public virtual IDictionary< AdGroup, Permission >
> GroupPermissions
> {
> get { return this.groupPermissions; }
> set { this.groupPermissions = value;}
> }
> }
>
> AdGroup.cs
> ----------------
> [Class(0, Table = "AD_GROUP")]
> public class AdGroup
> {
> private long id;
> private string samAccountName;
>
> [Id(0, TypeType = typeof(long), Column = "ID", Name = "Id",
> UnsavedValue = "0")]
> [Generator(1, Class = "native")]
> [Param(2, Name = "sequence", Content = "AD_GROUP_ID_SEQ")]
> public virtual long Id
> {
> get
> {
> return this.id;
> }
> set
> {
> this.id = value;
> }
> }
>
> [Property(0, TypeType = typeof(string), Unique = true, Column
> = "SAM_ACCOUNT_NAME", Name = "SamAccountName")]
> public virtual string SamAccountName
> {
> get
> {
> return this.samAccountName;
> }
> set
> {
> this.samAccountName = samAccountName;
> }
> }
> }
>
> Permission.cs:
> --------------------
> [Class(0, Table = "PERMISSION")]
> public class Permission
> {
> private long id;
> private string name;
>
> private ISet< Application > applicationList = new HashedSet<
> Application >();
>
> [Id(0, TypeType = typeof(long), Column = "ID", Name = "Id",
> UnsavedValue = "0")]
> [Generator(1, Class = "native")]
> [Param(2, Name = "sequence", Content = "PERMISSION_ID_SEQ")]
> public virtual long Id
> {
> get
> {
> return this.id;
> }
> set
> {
> this.id = value;
> }
> }
>
> [Property(0, Column = "NAME", TypeType = typeof(string),
> Unique = true, Name = "Name", NotNull = true)]
> public virtual string Name
> {
> get
> {
> return this.name;
> }
> set
> {
> this.name = value;
> }
> }
>
> public virtual ISet<Application> ApplicationList
> {
> get { return this.applicationList; }
> set{ this.applicationList = value;}
> }
> }
>
> These are the resulting xml-mapping-files: (Class-Names and Namespaces
> have been deleted or changed)
>
> Application.hbm.xml:
> --------------------------
> <?xml version="1.0" encoding="utf-8"?>
> <!--Generated by NHibernate.Mapping.Attributes on 2009-04-08
> 08:27:55Z.-->
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
> <class name="Application" table="APPLICATION">
> <id name="Id" column="ID" type="Int64" unsaved-value="0">
> <generator class="native">
> <param name="sequence">APPLICATION_ID_SEQ</param>
> </generator>
> </id>
> <property name="Name" type="String" column="NAME" not-null="true" /
>
> <property name="AssemblyGuid" type="String"
> column="ASSEMBLY_GUID" />
> <map name="GroupPermissions" table="GROUP_APPLICATION_PERMISSION"
> lazy="false" cascade="all" inverse="true">
> <key column="APPLICATION_ID" />
> <index-many-to-many class="AdGroup" column="AD_GROUP_ID" />
> <many-to-many class="Permission" column="PERMISSION_ID"
> fetch="join" lazy="false" />
> </map>
> </class>
> </hibernate-mapping>
>
> AdGroup.hbm.xml:
> -----------------------
> <?xml version="1.0" encoding="utf-8"?>
> <!--Generated by NHibernate.Mapping.Attributes on 2009-04-08
> 08:27:55Z.-->
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
> <class name="AdGroup" table="AD_GROUP">
> <id name="Id" column="ID" type="Int64" unsaved-value="0">
> <generator class="native">
> <param name="sequence">AD_GROUP_ID_SEQ</param>
> </generator>
> </id>
> <property name="SamAccountName" type="String"
> column="SAM_ACCOUNT_NAME" unique="true" />
> </class>
> </hibernate-mapping>
>
> Permission.hbm.xml:
> --------------------------
> <?xml version="1.0" encoding="utf-8"?>
> <!--Generated by NHibernate.Mapping.Attributes on 2009-04-08
> 08:27:55Z.-->
> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
> <class name="Permission" table="PERMISSION">
> <id name="Id" column="ID" type="Int64" unsaved-value="0">
> <generator class="native">
> <param name="sequence">PERMISSION_ID_SEQ</param>
> </generator>
> </id>
> <property name="Name" type="String" column="NAME" not-null="true"
> unique="true" />
> </class>
> </hibernate-mapping>
>
> This is how the tables are created using SchemaExport:
>
> drop table if exists AD_GROUP
> drop table if exists APPLICATION
> drop table if exists GROUP_APPLICATION_PERMISSION
> drop table if exists PERMISSION
> create table AD_GROUP (ID integer, SAM_ACCOUNT_NAME TEXT unique,
> primary key (ID))
> create table APPLICATION (ID integer, NAME TEXT not null,
> ASSEMBLY_GUID TEXT, primary key (ID))
> create table GROUP_APPLICATION_PERMISSION (APPLICATION_ID INTEGER not
> null, PERMISSION_ID INTEGER not null, AD_GROUP_ID INTEGER not null)
> create table PERMISSION (ID integer, NAME TEXT not null unique,
> primary key (ID))
>
> So I hope I'll get some help here. Thanks for your support in advance!
>
> Regards,
> Maik
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---