Hello, I don't know how to declare an intermediate subclass in Hibernate mapping file adding few properties, can someone help ?
I'm using a
table-per-hierarchy strategy and so
discriminator-value to map between different types of subclasses.
Here is the case (Hibernate version: 2.1.4) :
I'd like to have a base class Datasource declared as :
Code:
public abstract class Datasource
Then few concrete classes directly extending it :
Code:
public class ManualInputDatasource extends Datasource
public class FixedDatasource extends Datasource
And then to add key & query fields :
Code:
public abstract class WithKeyAndQueryDatasource extends Datasource
private String key;
private String query;
And next extending WithKeyAndQueryDatasource to concrete classes :
Code:
public class CSVDatasource extends WithKeyAndQueryDatasource
public class G2Datasource extends WithKeyAndQueryDatasource
public class V2Datasource extends WithKeyAndQueryDatasource
All I found is to forget the usage of intermediate WithKeyAndQueryDatasource class and have the following mapping, it works, but doesn't look the most beautiful mapping file ever, see red section repeated three times.
Mapping documents:<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping package="com.mycompany.app">
<class name="
Datasource" table="Tbl_Datasource">
<composite-id class="DatasourcePK" name="primaryKey">
<key-property
column="Id_Datasource"
name="idDatasource"
type="string"
/>
<key-many-to-one
class="Exhibit"
column="Id_Exhibit"
name="exhibit"
/>
</composite-id>
<discriminator
column="Cd_DatasourceType"
type="string"
/>
<subclass name="
ManualInputDatasource" discriminator-value="MAN"/>
<subclass name="
FixedDatasource" discriminator-value="FIX"/>
<subclass name="
CSVDatasource" discriminator-value="CSV">
<property
column="Txt_key"
length="255"
name="key"
not-null="false"
type="string"
/>
<property
column="Cd_Query"
length="255"
name="query"
not-null="false"
type="string"
/> </subclass>
<subclass name="
G2Datasource" discriminator-value="GE2">
<property
column="Txt_key"
length="255"
name="key"
not-null="false"
type="string"
/>
<property
column="Cd_Query"
length="255"
name="query"
not-null="false"
type="string"
/> </subclass>
<subclass name="
V2Datasource" discriminator-value="EF2">
<property
column="Txt_key"
length="255"
name="key"
not-null="false"
type="string"
/>
<property
column="Cd_Query"
length="255"
name="query"
not-null="false"
type="string"
/> </subclass>
</class>
</hibernate-mapping>
Whereas I'd like to be able to declare many discriminator values, so to have something like :
Code:
...<subclass name="WithKeyAndQueryDatasource" discriminator-values="{CSV,EF2,GE2}">
<property
column="Txt_key"
length="255"
name="key"
not-null="false"
type="string"
/>
<property
column="Cd_Query"
length="255"
name="query"
not-null="false"
type="string"
/>
<subclass name="CSVDatasource" discriminator-value="CSV"/>
<subclass name="G2Datasource" discriminator-value="GE2"/>
<subclass name="V2Datasource" discriminator-value="EF2"/>
</subclass>...
How can I do this ?
Any Idea ?
Thanx, r0main