> I want to reuse logic from one subclass to the other, so it doesnt work
It does work - the logic goes into the abstract class, where all shared logic belongs anyway.
> in the class mapping, use polymorphism="explicit", and this is what I want and works.
It's a nice work-around, but it is not a solution unless your inheritance hierarchy fits a very specific description. Explicit polymorphism breaks the object model because it lets you slice your Java objects, presenting an object as its base, which in most cases it isn't. The feature is there for a very specific reason - to implement the "lightweight object" pattern, a work-around to pre-v3 Hibernate's inability to deal with lazy fetching at the attribute level. From the documentation: "Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a "lightweight" class that contains a subset of the table columns)." There are substantial problems with this approach - inability to run "real" polymorphic queries and the need to fiddle with the "evict" calls on the session are only the beginning.
See
this article for more information.