Dobry den,

hraju si s Hibernate (+Spring)  a narazil jsem na nasledujici chovani.

Mam tridu Visit, velmi primocare hb mapovani. Kdyz ji ukladam prostrednictvim Hibernate do DB vsechno funguje skvele.

Pak mam potomka tehle tridy: tridu MockVisit (trida nedela nic specialniho, jen poskytuje instance pouzite v Junit testech)

Kdyz instanci MockVisit predhodim Hibernate k ulozedni do DB, dostanu chybu:

org.hibernate.MappingException: Unknown entity: ...model._mock.MockVisit

Zda se mi, jako by Hibernate nedokazala zjistit, ze MockVisit je potomkem Visit. Tohle je normalni chovani Hibernate nebo nekde delam chybu?

Spring 1.2.8, Hibernate 3

Diky

kolisko


Prikladam zdrojaky obou trid a mapovani. Vypustil jsem, podle meho soudu, nudne casti:

public class Visit extends DBEntity{
private static final long serialVersionUID = -4158611581435953020L;

   private User         enteredBy = null;        // entered by user
   private User         confirmedBy = null;

}
--------------------------------------------------------
abstract public class DBEntity implements Serializable{

   private Integer id;

   // ... getter a setter pro id

   public boolean isNew() {
       return (this.id == null);
   }

}
--------------------------------------------------------------
public class MockVisit extends Visit {
   private static final long serialVersionUID = 6365990982317321939L;

   public static final Visit V1 = new MockVisit (MockUser.U1, MockUser.U1);

// trivialni private konstruktor
----------------------------------------------------------------
jak ukladam do DB (vyuzivam hibernate podporu ve Springu):

       getHibernateTemplate().merge(visit);


Visit.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
       "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd";>

<hibernate-mapping auto-import="true" default-lazy="false">

<class name="cz.euromise.adamekJ.model.Visit" table="Navsteva" schema="ML2">
       <id name="id" column="NavstevaId"> <generator class="native"/> </id>

       <many-to-one name="enteredBy"
           class="cz.euromise.adamekJ.model.User"
           column="ZaznamenalId"
           fetch="select"/>

       <many-to-one name="confirmedBy"
           class="cz.euromise.adamekJ.model.User"
           column="PotvrdilId"
           fetch="select"/>
</class>

</hibernate-mapping>
---------------------------------------------------------------------
Spring/Hibernate konfigurace

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="mappingResources">
           <list>
               <value>hbm/Patient.hbm.xml</value>
               <value>hbm/Visit.hbm.xml</value>
               <value>hbm/User.hbm.xml</value>
           </list>
       </property>

       <property name="hibernateProperties">
           <props>
<!-- HSQL mapping --> <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
               <prop key="hibernate.show_sql">true</prop>
               <prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
           </props>
       </property>
...

   </bean>



Odpovedet emailem