[ 
http://thecla.homeftp.net:8380/jira/browse/HIB-48?page=comments#action_10843 ]
     
Chad Brandon commented on HIB-48:
---------------------------------

Moved to the hibernate cartridge since spring will soon be using hibernate and 
hibernate has the same issue.

> Hibernate <joined-subclass> mapping generates superfluous *.hbm.xml files
> -------------------------------------------------------------------------
>
>          Key: HIB-48
>          URL: http://thecla.homeftp.net:8380/jira/browse/HIB-48
>      Project: Hibernate Cartridge
>         Type: Bug
>     Reporter: Matthias Bohlen
>     Assignee: Chad Brandon

>
>
> Let's assume the user has three entities A, B, C where B and C specialize A.
> When a user sets the inheritance mapping strategy to "subclass" (which really 
> means <joined-subclass>) then the Spring cartridge correctly generates 
> A.hbm.xml with
>     <class name="AImpl" table="A">
>         <joined-subclass name="BImpl" table="B">
>             ...
>         </joined-subclass>
>         <joined-subclass name="CImpl" table="C">
>             ...
>         </joined-subclass>
>     </class>
> BUT: it also generates additional, superfluous files B.hbm.xml and C.hbm.xml! 
> Hibernate schema mapper complains about "duplicate imports" for BImpl and 
> CImpl.
> Looking at the code for SpringEntityLogicImpl, there is a complex method that 
> tries to guess whether a .hbm.xml file needs to be written or not:
> <code>
> protected boolean handleIsRootInheritanceEntity()
> {
>     boolean result = false;
>     GeneralizableElementFacade superElement = this.getGeneralization();
>     if (superElement == null)
>     {
>         String inheritance = this.getInheritance(this);
>         // We are a root if we are the base class and not interface
>         // inheritance
>         result = (inheritance == null)
>             || !inheritance.equals(INHERITANCE_STRATEGY_INTERFACE);
>     }
>     else
>     {
>         // We are a subclass
>         GeneralizableElementFacade root = getRootInheritanceEntity();
>         String inheritance = getInheritance(root);
>         // Are we the subclass element
>         result = root.getFullyQualifiedName().equals(
>             getFullyQualifiedName());
>         if (!result && inheritance != null
>             && inheritance.equals(INHERITANCE_STRATEGY_SUBCLASS))
>         {
>             // If not check if we are a subclass
>             result = superElement.getFullyQualifiedName().equals(
>                 root.getFullyQualifiedName());
>         }
>     }
>     return result;
> }
> </code>
> The bug seems to be in this method (I think it is somewhere in the "else" 
> clause).
> HOWEVER: I suggest to throw away this method and ALWAYS write one .hbm.xml 
> file per class, using a different syntax. This syntax allows to use 
> <subclass> and <joined-subclass> mapping elements in a separate mapping file 
> (as a top level element, instead of <class>). You then have to declare the 
> class that is extended (for example write a new file B.hbm.xml with:
>     <subclass name="B" extends="A">
>        ...
>     </subclass>
> This would be MUCH simpler, you can also throw away the 
> getRootInheritanceEntity() method altogether. The price for this is: at 
> runtime, you have to load A.hbm.xml *before* B.hbm.xml and C.hbm.xml.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://thecla.homeftp.net:8380/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Andromda-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/andromda-devel

Reply via email to