Bugs item #663037, was opened at 2003-01-06 21:57 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=428708&aid=663037&group_id=40712
Category: None Group: None Status: Open Resolution: None >Priority: 8 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: Interface Inheritance not seen at Runtime Initial Comment: Hi! Congratulations for Hibernate ! In our project, we are going to migrate from JDO to Hibernate ! I encounter only one little pb with the use of Java Interface in the mapping file, the hierachie of Interfaces is ignored by hibernate. Example: Java Interfaces : <<<< package interfaces; public interface Reference { public abstract void setRef(String ref); public abstract String getRef(); } >>>> <<<< package interfaces; public interface Referenceable { public Reference getReference(); public void setReference(Reference reference); } >>>> <<<< package interfaces; import java.util.Collection; public interface Child extends Referenceable { public Collection getParents(); public void setParents(Collection parents); public Collection getAncestors(); public void setAncestors(Collection ancestors); public boolean addParent(Parent parent); public boolean removeParent(Parent parent); public boolean isChildOf(Parent parent); public boolean isDescendentOf(Parent ancestor); } >>>> <<<< package com.agrochannels.qxe; import java.util.Collection; public interface Parent extends Child { public Collection getChildren(); public void setChildren(Collection children); public Collection getDescendents(); public void setDescendents(Collection descendents); public boolean addChild(Child child); public boolean removeChild(Child child); public boolean isParentOf(Child child); public boolean isAncestorOf(Child child); } >>>> And We have Implementations: <<<< package implementation; public class ReferenceImpl implements Reference, Serializable, UserType { .. } >>>> <<<< package implementation; public abstract class ReferencedObjectImpl implements Referenceable, Serializable { .. } >>>> <<<< package implementation; public class ChildImpl extends ReferencedObjectImpl implements Child { .. } >>>> <<< package implementation; public class ParentImpl extends ChildImpl implements Parent { .. } >>> And with this hibernate mapping file : <<<< <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 1.1//EN" "http://hibernate.sourceforge.net/hibernate-mapping- 1.1.dtd"> <hibernate-mapping> <!-- interfaces.Referenceable root --> <class name="interfaces.Referenceable" table="Referenceable"> <id name="reference" type="implementation.ReferenceImpl"> <generator class="assigned"/> </id> <discriminator/> <subclass name="implementation.ReferencedObjectImpl"> </subclass> <subclass name="interfaces.Child"> <bag role="parents" table="parents" lazy="true" cascade="all"> <key column="child_ref"/> <many-to- many class="interfaces.Parent" column="parent_ref"/> </bag> <bag role="ancestors" table="ancestors" lazy="true" cascade="all"> <key column="child_ref"/> <many-to- many class="interfaces.Parent" column="parent_ref"/> </bag> <subclass name="implementation.ChildImpl"> </subclass> <subclass name="interfaces.Parent"> <bag role="children" table="parents" readonly="true" lazy="true" cascade="all"> <key column="parent_ref"/> <many-to-many class="interfaces.Child" column="child_ref"/> </bag> <bag role="descendents" table="ancestors" readonly="true" lazy="true" cascade="all"> <key column="parent_ref"/> <many-to-many class="interfaces.Child" column="child_ref"/> </bag> <subclass name="implementation.ParentImpl"> </subclass> </subclass> </subclass> </class> </hibernate-mapping> >>>> I can export the schema with cirrus.hibernate.tools.SchemaExport but at Runtime I get this exception : [java] cirrus.hibernate.PropertyNotFoundException: Could not find a getter for reference in class interfaces.Child [java] at cirrus.hibernate.helpers.ReflectHelper.getGetter (ReflectHelpe r.java:198) [java] at cirrus.hibernate.helpers.ReflectHelper.setter (ReflectHelper.j ava:164) [java] at cirrus.hibernate.helpers.ReflectHelper.getSetter (ReflectHelpe r.java:145) [java] at cirrus.hibernate.persister.AbstractEntityPersister.<init> (Abs tractEntityPersister.java:487) [java] at cirrus.hibernate.persister.EntityPersister.<init> (EntityPersi ster.java:641) [java] at cirrus.hibernate.impl.SessionFactoryImpl.<init> (SessionFactor yImpl.java:192) [java] at cirrus.hibernate.impl.DatastoreImpl.buildSessionFactory (Datas toreImpl.java:403) [java] at cirrus.hibernate.impl.DatastoreImpl.buildSessionFactory (Datas toreImpl.java:392) Or the getReference() method in Child is inherited from Referenceable ! I have a workaround : When I add explicitly the necessary methods in Child and other Interfaces, it works. I think that it seems only necessary to correct the method cirrus.hibernate.helpers.ReflectHelper.getGetter() to deal with interfaces and their inheritance. I hope It was clear (I could have provided a simplier example with 2 interfaces, my english is not very good...). Thanks, Frank ---------------------------------------------------------------------- >Comment By: Gavin King (oneovthafew) Date: 2003-01-07 10:21 Message: Logged In: YES user_id=384580 Yes, you are right! I didn't realise this problem existed .... The trouble is that ReflectHelper only scans superclasses, not superinterfaces for property declarations. This is almost always okay, since concrete classes redefine the property themselves and mapping interfaces is unusual (though certainly not wrong). In this case where we have interface _inheritance_, it breaks. I will fix this ASAP, in both the 2.0 and 1.2 source trees. (The fix should be there in about 12 hours or so.....) Thanks! ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=428708&aid=663037&group_id=40712 ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel