Hi,
gegeben sind:
Oberklasse Documents sowie Unterklassen PlaceholderDocuments und SignatureDocuments. Mein Problem ist, das ich bestimmte Elemente der Oberklasse brauche, aber auch immer Elemente der Unterklasse in meiner List habe:
Hier mal die hbm.xmls:
Documents:
Wenn ich folgende Methode aus dem DAO aufrufe, bekomme ich die jeweiligen PlaceholderDocuments.Das macht Hibernate anhand des Discriminators automatisch.
wenn ich aber folgendes aufrufe,
bekomme ich sowohl Documents mit Discriminator D und PlaceHolderDocuments mit Discriminator PD.
Wieso ist das so?Ich hab dafür doch extra in der hbm.xml den Discriminator D für die Oberklasse angegeben! Kann man evtl. die Oberklasse nicht mehr aufrufen, macht Hibernate sie abstrakt? Kann man den Discriminator irgendwie abfragen a la
(Pseudocode)
oder kann ich jetzt nur noch mit Unterklassen arbeiten?Oder mach ich was falsch?
Ich hoffe, ich hab mich verständlich ausgedrückt!
Ach so, die fehlenden Variablen wie project und so sind natürlich vorhanden, ich wollte nur nicht die gesamte hbm.xml kopieren und hab sie ein wenig zusammengekürzt!
Grüße,
Peter
gegeben sind:
Oberklasse Documents sowie Unterklassen PlaceholderDocuments und SignatureDocuments. Mein Problem ist, das ich bestimmte Elemente der Oberklasse brauche, aber auch immer Elemente der Unterklasse in meiner List habe:
Hier mal die hbm.xmls:
Documents:
Code:
<?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 package="de.etss.core.db.domain">
<class name="Documents" table="documents" catalog="etss" discriminator-value="D">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<discriminator column="document_type" type="string"/>
<property name="title" type="string">
<column name="title" length="55" />
</property>
<property name="comment" type="string">
<column name="comment" length="500" />
</property>
<property name="fileSize" type="double">
<column name="file_size" />
</property>
<property name="mimeType" type="string">
<column name="mime_type" length="20" />
</property>
<property name="fileName" type="string">
<column name="file_name" length="200" />
</property>
<property name="category" type="integer">
<column name="category"/>
</property>
<subclass name="SignatureDocumentst" discriminator-value="ST">
<property name="md5hash" type="big_decimal" column="hash"/>
</subclass>
<subclass name="PlaceHolderDocuments" discriminator-value="PD">
<property name="template" type="boolean" column="template"/>
<property name="mandatory" type="boolean" column="mandatory"/>
</subclass>
</class>
</hibernate-mapping>
Wenn ich folgende Methode aus dem DAO aufrufe, bekomme ich die jeweiligen PlaceholderDocuments.Das macht Hibernate anhand des Discriminators automatisch.
Java:
@Override
public List<PlaceHolderDocuments> loadPlaceHolderDocuments(Affiliate affiliateId, Integer id)
{
return getHibernateTemplate().find(" from PlaceHolderDocuments d where d.template = ? and d.affiliate = ? and d.tenderType =? ",new Object[]{Boolean.TRUE,affiliateId,id});
}
wenn ich aber folgendes aufrufe,
Java:
@Override
public List<Documents> loadStandardDocuments(Affiliate affiliate)
{
List<Documents> docs = getHibernateTemplate().find(" from Documents d where d.affiliate = ? and d.project is null ", new Object[]{affiliate});
return docs;
}
Wieso ist das so?Ich hab dafür doch extra in der hbm.xml den Discriminator D für die Oberklasse angegeben! Kann man evtl. die Oberklasse nicht mehr aufrufen, macht Hibernate sie abstrakt? Kann man den Discriminator irgendwie abfragen a la
(Pseudocode)
Java:
@Override
public List<Documents> loadStandardDocuments(Affiliate affiliate)
{
List<Documents> docs = getHibernateTemplate().find(" from Documents d where d.affiliate = ? and d.project is null and discriminator is D ", new Object[]{affiliate});
return docs;
}
oder kann ich jetzt nur noch mit Unterklassen arbeiten?Oder mach ich was falsch?
Ich hoffe, ich hab mich verständlich ausgedrückt!
Ach so, die fehlenden Variablen wie project und so sind natürlich vorhanden, ich wollte nur nicht die gesamte hbm.xml kopieren und hab sie ein wenig zusammengekürzt!
Grüße,
Peter
Zuletzt bearbeitet: