6.2.1.  Advantages

The joined strategy has the following advantages:

 Using joined subclass tables results in the most normalized database
schema, meaning the schema with the least spurious or redundant data.
As more subclasses are added to the data model over time, the only
schema modification that needs to be made is the addition of
corresponding subclass tables in the database (rather than having to
change the structure of existing tables).
Relations to a base class using this strategy can be loaded through
standard joins and can use standard foreign keys, as opposed to the
machinations required to load polymorphic relations to table-per-class
base types, described below.

6.2.2.  Disadvantages

Aside from certain uses of the table-per-class strategy described
below, the joined strategy is often the slowest of the inheritance
models. Retrieving any subclass requires one or more database joins,
and storing subclasses requires multiple INSERT or UPDATE statements.
This is only the case when persistence operations are performed on
subclasses; if most operations are performed on the least-derived
persistent superclass, then this mapping is very fast.

------------------
http://openjpa.apache.org/builds/1.0.2/apache-openjpa-1.0.2/docs/manual/jpa_overview_mapping_inher.html


On Mar 2, 1:05 am, James Gregory <[email protected]> wrote:
> Your design seems a little strange, why are you mapping everything as
> joined-subclasses under DomainEntity? It's more sensible to map everything
> individually.
>
>
>
> On Mon, Mar 2, 2009 at 7:38 AM, BringerOD <[email protected]> wrote:
>
> > Here is my mappings.
>
> > When I select a DomainEntity it tries to retrieve all data.
>
> > All I want tis the DomainEntity.
>
> > Any suggestions?
>
> >   public DomainEntityMap()
> >        {
> >            WithTable("DomainEntity");
>
> >            Id(x => x.Id, "EntityID")
> >                .WithUnsavedValue(0)
> >                .GeneratedBy.Identity();
>
> >            Map(x => x.CreatedDate);
> >            Map(x => x.ModifiedDate);
>
> >            References(x => x.Company);
> >            References(x => x.CreatedBy);
> >            References(x => x.ModifiedBy);
>
> >            JoinedSubClass("EntityID", PersonMap());
> >            JoinedSubClass("EntityID", FileMap());
> >            JoinedSubClass("EntityID", CompanyMap());
> >        }
>
> >        private static Action<AutoJoinedSubClassPart<Person>> PersonMap
> > ()
> >        {
> >            return (js =>
> >                        {
> >                            js.Component(cm => cm.Name, NameMap());
> >                            js.Component(cm => cm.HomeEmail, EmailMap
> > ("HomeEmail"));
> >                            js.Component(cm => cm.WorkEmail, EmailMap
> > ("WorkEmail"));
> >                            js.Component(cm => cm.HomePhone, PhoneMap
> > ("HomePhone"));
> >                            js.Component(cm => cm.WorkPhone, PhoneMap
> > ("WorkPhone"));
>
> >                            js.JoinedSubClass("EntityID", UserMap());
> >                        });
> >        }
>
> >        private static Action<AutoJoinedSubClassPart<Company>>
> > CompanyMap()
> >        {
> >            return (js =>
> >            {
> >                js.Map(x => x.Name);
>
> >            });
> >        }
>
> >        private static Action<AutoJoinedSubClassPart<File>> FileMap()
> >        {
> >            return (js =>
> >            {
> >                js.WithTableName("FileData");
> >                js.Map(x => x.FileName);
> >                js.Map(x => x.FileData);
> >                js.Map(x => x.ContentType);
>
> >            });
> >        }
>
> >        private static Action<AutoJoinedSubClassPart<User>> UserMap()
> >        {
> >            return (js =>
> >                        {
> >                            js.WithTableName("UserData");
> >                            js.Map(x => x.UserName);
> >                            js.Map(x => x.Password);
> >                        });
> >        }
>
> >        private static Action<ComponentPart<Name>> NameMap()
> >        {
> >            return c =>
> >                       {
> >                           c.Map(x => x.FirstName);
> >                           c.Map(x => x.MiddleName);
> >                           c.Map(x => x.LastName);
> >                           c.Map(x => x.Salutation);
> >                           c.Map(x => x.Suffix);
> >                           c.Map(x => x.Title);
> >                       };
> >        }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to