[ http://jira.nhibernate.org/browse/NH-662?page=3Dcomments#action_1452=
1 ]
=20
mark lewman commented on NH-662:
--------------------------------
http://www.vespaservizio.com/public/mb/42.shtml - http://www.vespaservizio=
.com/public/mb/43.shtml - http://www.vespaservizio.com/public/mb/44.shtml =
- http://www.vespaservizio.com/public/mb/45.shtml - http://www.vespaservi=
zio.com/public/mb/46.shtml - http://www.vespaservizio.com/public/mb/47.sht=
ml - http://www.vespaservizio.com/public/mb/48.shtml - http://www.vespase=
rvizio.com/public/mb/49.shtml - http://www.vespaservizio.com/public/mb/50.=
shtml - http://www.vespaservizio.com/public/mb/51.shtml - http://www.vesp=
aservizio.com/public/mb/52.shtml - http://www.vespaservizio.com/public/mb/=
53.shtml - http://www.vespaservizio.com/public/mb/54.shtml - http://www.v=
espaservizio.com/public/mb/55.shtml - http://www.vespaservizio.com/public/=
mb/56.shtml - http://www.vespaservizio.com/public/mb/57.shtml - http://ww=
w.vespaservizio.com/public/mb/58.shtml - http://www.vespaservizio.com/publ=
ic/mb/59.shtml - http://www.vespaservizio.com/public/mb/60.shtml - http:/=
/www.vespaservizio.com/public/mb/61.shtml - http://www.vespaservizio.com/p=
ublic/mb/62.shtml - http://www.vespaservizio.com/public/mb/63.shtml - htt=
p://www.vespaservizio.com/public/mb/64.shtml - http://www.vespaservizio.co=
m/public/mb/65.shtml - http://www.vespaservizio.com/public/mb/66.shtml - =
http://www.vespaservizio.com/public/mb/67.shtml - http://www.vespaservizio=
.com/public/mb/68.shtml - http://www.vespaservizio.com/public/mb/69.shtml =
- http://www.vespaservizio.com/public/mb/70.shtml - http://www.vespaservi=
zio.com/public/mb/71.shtml - http://www.vespaservizio.com/public/mb/72.sht=
ml - http://www.vespaservizio.com/public/mb/73.shtml - http://www.vespase=
rvizio.com/public/mb/74.shtml - http://www.vespaservizio.com/public/mb/75.=
shtml - http://www.vespaservizio.com/public/mb/76.shtml - http://www.vesp=
aservizio.com/public/mb/77.shtml - http://www.vespaservizio.com/public/mb/=
78.shtml - http://www.vespaservizio.com/public/mb/79.shtml - http://www.v=
espaservizio.com/public/mb/80.shtml - http://www.vespaservizio.com/public/=
mb/81.shtml - http://www.vespaservizio.com/public/mb/82.shtml - http://ww=
w.vespaservizio.com/public/mb/83.shtml - http://www.vespaservizio.com/publ=
ic/mb/84.shtml - http://www.vespaservizio.com/public/mb/85.shtml - http:/=
/www.vespaservizio.com/public/mb/86.shtml - http://www.vespaservizio.com/p=
ublic/mb/87.shtml - http://www.vespaservizio.com/public/mb/88.shtml - htt=
p://www.vespaservizio.com/public/mb/89.shtml - http://www.vespaservizio.co=
m/public/mb/90.shtml - http://www.vespaservizio.com/public/mb/91.shtml - =
http://www.vespaservizio.com/public/mb/92.shtml - http://www.vespaservizio=
.com/public/mb/93.shtml - http://www.vespaservizio.com/public/mb/94.shtml =
- http://www.vespaservizio.com/public/mb/95.shtml - http://www.vespaservi=
zio.com/public/mb/96.shtml - http://www.vespaservizio.com/public/mb/97.sht=
ml - http://www.vespaservizio.com/public/mb/98.shtml - http://www.vespase=
rvizio.com/public/mb/99.shtml - http://www.vespaservizio.com/public/mb/100=
.shtml - http://www.vespaservizio.com/public/mb/101.shtml - http://www.ve=
spaservizio.com/public/mb/102.shtml - http://www.vespaservizio.com/public/=
mb/103.shtml - http://www.vespaservizio.com/public/mb/104.shtml - http://=
www.vespaservizio.com/public/mb/105.shtml - http://www.vespaservizio.com/p=
ublic/mb/106.shtml - http://www.vespaservizio.com/public/mb/107.shtml - h=
ttp://www.vespaservizio.com/public/mb/108.shtml - http://www.vespaservizio=
.com/public/mb/109.shtml - http://www.vespaservizio.com/public/mb/110.shtm=
l - http://www.vespaservizio.com/public/mb/111.shtml - http://www.vespase=
rvizio.com/public/mb/112.shtml - http://www.vespaservizio.com/public/mb/11=
3.shtml - http://www.vespaservizio.com/public/mb/114.shtml - http://www.v=
espaservizio.com/public/mb/115.shtml - http://www.vespaservizio.com/public=
/mb/116.shtml - http://www.vespaservizio.com/public/mb/117.shtml - http:/=
/www.vespaservizio.com/public/mb/118.shtml - http://www.vespaservizio.com/=
public/mb/119.shtml - http://www.vespaservizio.com/public/mb/120.shtml - =
http://www.vespaservizio.com/public/mb/121.shtml - http://www.vespaservizi=
o.com/public/mb/122.shtml - http://www.vespaservizio.com/public/mb/123.sht=
ml - http://www.vespaservizio.com/public/mb/124.shtml - http://www.vespas=
ervizio.com/public/mb/125.shtml - http://www.vespaservizio.com/public/mb/1=
26.shtml - http://www.vespaservizio.com/public/mb/127.shtml - http://www.=
vespaservizio.com/public/mb/128.shtml - http://www.vespaservizio.com/publi=
c/mb/129.shtml - http://www.vespaservizio.com/public/mb/130.shtml - http:=
//www.vespaservizio.com/public/mb/131.shtml - http://www.vespaservizio.com=
/public/mb/132.shtml - http://www.vespaservizio.com/public/mb/133.shtml -=
http://www.vespaservizio.com/public/mb/134.shtml - http://www.vespaserviz=
io.com/public/mb/135.shtml - http://www.vespaservizio.com/public/mb/136.sh=
tml - http://www.vespaservizio.com/public/mb/137.shtml - http://www.vespa=
servizio.com/public/mb/138.shtml - http://www.vespaservizio.com/public/mb/=
139.shtml - http://www.vespaservizio.com/public/mb/140.shtml - http://www=
.vespaservizio.com/public/mb/141.shtml -=20
> Class Hierarchies
> -----------------
>
> Key: NH-662
> URL: http://jira.nhibernate.org/browse/NH-662
> Project: NHibernate
> Type: New Feature
> Components: Core
> Versions: 1.2.0.Beta2
> Reporter: Anton Gogolev
> Priority: Minor
> Fix For: LATER
>
> NH can only persist/load classes explicitly mapped to database tables in =
HBM files. On the one hand, this is quite logical. But on the other it limi=
ts further use of mapped classes. For instance, it is impossible to inherit=
from them and save the ancestor since its type is not mentioned anywhere i=
n the mapping files. Here's an example:
> // Base is mapped to, say, Base table in Base.hbm.xml
> class Base
> {
> public int A
> { get ...; set ... }
> protected virtual Foo()
> {
> // Some logic.
> }
> }
> // Derived has no mapping file
> class Derived : Base
> {
> protected override Foo()
> {
> // Some other logic
> }
> }
> static void Main()
> {
> ISession session =3D sessionFactory.OpenSession();
> Base base =3D new Base();
> base.A =3D 12;
> session.Save(base); // This succeeds
> base =3D session.Load(typeof(Base), 2) as Base; // This succeeds as w=
ell
> base =3D new Derived(); // Note "Derived" here
> base.A =3D 13;
> session.Save(base); // And this fails
> // We won't even get here, but if we did,
> // this would have failed too
> base =3D session.Load(typeof(Derived), 3) as Derived;
> }
> As you can see, the logic behind this is quite OOP-ish :) You inherit fro=
m some class to extend its functionality and state (in other words, functio=
ns and member variables). However, this is not possible with NHibernate, si=
nce it requires every derived class to be mapped somehow.
> How I see it done (conceptually) is as follows.
> Upon persisting an entity NH should traverse a list of base classes of th=
e entity being persisted, until it finds a type which is mapped to a databa=
se table. This type is used to persist an entity.
> When loading an entity from the database, NH can freely create an instanc=
e of derived class, since it is given its type (typeof(Derived) in the exam=
ple above). Then again it traveses a list of base classes, and loads derive=
d object as an object of base class. Of course some properties remain unini=
tialized, but that's not a problem, I think.=20
--=20
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.nhibernate.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
|