I am relatively new to hibernate, I have too many tables in the Database by using table per subclass approach.
Is there any way to reduce these tables by adapting a combination of different strategies.My hbm file looks like this.
Thanks in advance
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.cinerent.yeti.model.user.IFinancialBody" table="USERS" abstract="true" lazy="false">
<id name="id" type="long" unsaved-value="null" column="USER_ID">
<generator class="identity"/>
</id>
<many-to-one lazy="false" name="ledger" column="FK_LEDGER" class="com.cinerent.yeti.model.financial.ILedger" not-null="false" cascade="all"/>
<joined-subclass abstract="true" lazy="true" name="com.cinerent.yeti.model.user.IMandator">
<key column="USER_ID"/>
<property name="name" column="NAME" not-null="false" unique="true"/>
<joined-subclass name="com.cinerent.yeti.model.user.impl.MandatorImpl" table="MANDATORS" lazy="true">
<key column="MANDATOR_ID"/>
</joined-subclass>
</joined-subclass>
<joined-subclass abstract="true" name="com.cinerent.yeti.model.user.IPromoter" lazy="true">
<key column="USER_ID"/>
<property name="name" column="NAME" not-null="false" unique="true" />
<many-to-one name="mandator" column="FK_MANDATOR" class="com.cinerent.yeti.model.user.IMandator" not-null="false"/>
<list name="products" cascade="all, all-delete-orphan">
<key column="FK_PROMOTER"/>
<list-index column="LIST_INDEX" base="0"/>
<one-to-many class="com.cinerent.yeti.model.product.IProduct"/>
</list>
<joined-subclass name="com.cinerent.yeti.model.user.impl.PromoterImpl" table="PROMOTERS" lazy="true">
<key column="USER_ID"/>
</joined-subclass>
</joined-subclass>
<joined-subclass abstract="true" name="com.cinerent.yeti.model.user.IUser">
<key column="USER_ID"/>
<property name="username" column="USERNAME" unique="true"/>
<property name="lastLogin" column="LAST_LOGIN" type="org.joda.time.contrib.hibernate.PersistentDateTime" not-null="false"/>
joined-subclass abstract="true" name="com.cinerent.yeti.model.user.IConsumer">
<key column="USER_ID"/>
<many-to-one name="secretQuestion" column="FK_SECRET_QUESTION"class="com.cinerent.yeti.model.user.ISecretQuestion" not-null="false"/>
<property name="secretAnswer" column="SECRET_ANSWER" />
<many-to-one name="billingAddress" column="FK_BILLING_ADDRESS" class="com.cinerent.yeti.model.user.IAddress" cascade="all"/>
<list name="consumerCards" cascade="all, all-delete-orphan">
<key column="FK_CONSUMER" not-null="true"/>
<list-index column="LIST_INDEX" base="0"/>
<one-to-many class="com.cinerent.yeti.model.user.IConsumerCard"/>
</list>
<joined-subclass name="com.cinerent.yeti.model.user.impl.ConsumerImpl" table="CONSUMERS">
<key column="USER_ID"/>
</joined-subclass>
</joined-subclass>
</joined-subclass>
</class>
</hibernate-mapping>
|