2014-11-25 9:29 GMT+01:00 Emmanuel Bernard <emmanuel(a)hibernate.org>:
This is a user related question that should go on our forums
https://forums.hibernate.org
It's intended as a question/discussion on the design of Hibernate, which is
why I thought it was relevant here. The background is that the same
question has appeared for NHibernate, which I'm involved with.
But to answer you, you sometimes want to have a physical table for
that
abstract class. So Hibernate ORM’s “abstract” really means map it to a
table or not. Java’s abstract has a different meaning, it means must be
subclassed or not. Mapping both together does not really work.
According to the documentation, it seems to only be used together with
union-subclass, where the tables for the subclasses must contain columns
also for any base class properties.
So I can understand that I might want to specify abstract=true for a
non-abstract base class in case I don't want to have instances of it, and
am unable to change the class. But is there any situation where I would
want to have a table for an abstract superclass when using union-subclass?
Wouldn't any columns in such a table be inaccessible anyway due to never
being used by Hibernate?
Or to put it another way, if it cannot be removed completely, would this
default value be useful in the sense that it would be correct for most
users most of the time?
abstract={IsAbstract(theClass)}
Not that I'm proposing to have it changed, I assume it would be too much of
a compatibility problem. However, in newer and less stable mapping
frameworks (NH's mapping-by-code) it might be possible.
Could you propose a small pull request that clarifies this in the
documentation ?
II think the mechanics of it are ok. When I understand the design issues
that might call for abstract != classIsAbstract, I could certainly submit a
few lines on that.
Emmanuel
On 24 Nov 2014, at 11:58, Oskar Berggren <oskar.berggren(a)gmail.com> wrote:
Hi,
The Hibernate documentation (section 10.1.5. Table per concrete class
http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch10.html#inher...
) says:
If your superclass is abstract, map it with abstract="true". If it is not
abstract,
an additional table (it defaults to PAYMENT in the example above), is
needed
to hold instances of the superclass.
Why is this keyword needed? Couldn't abstract classes be detected
automatically using reflection?
/Oskar
_______________________________________________
hibernate-dev mailing list
hibernate-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev