-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Problem mit Inheritance mapping (Table per class-hierarchy)
PostPosted: Wed Feb 07, 2007 9:28 am 
Newbie

Joined: Wed Feb 07, 2007 8:19 am
Posts: 1
Hi zusammen,
ich hab eine Klasse B von A abgeleitet. Beide sind auf die Tabelle T_AB gemappt. Eine column discriminator unterscheidet zwischen beiden Klassen - alles nach Vorschrift.
Lade ich eine Instanz von B direkt, also per query mit "select from B" oder per load oder get, funktioniert auch alles.
Das generierte SQL endet brav mit einem " ...where discriminator=discriminator_von_B".
Nun das Problem:
Ich habe eine Klasse C die eine one-to-many Beziehung zu B hat. Lade ich nun C und eine Liste von B (per Hibernate.initialize, eager fetch, etc.) wird immer alles geladen. Das heißt es werden nicht nur die Zeilen geladen, die durch den Diskriminator B eindeutig identifizieren sondern eben alle. Im generierten sql fehlt dann auch die where-clause die die Unterscheidung realisiert.
hier die mapping Dateien für A und B:


<hibernate-mapping>
<class name="BaseCoverageArea"
table="coverage_area" >

<composite-id>
<key-property name="carrierId" column="SUPPLIERID"/>
<key-property name="countryId" column="COUNTRYID"/>
</composite-id>
<discriminator column="ISDELETED" type="boolean"/>
<subclass name="CoverageArea" discriminator-value="false">
<many-to-one name="supplier" class="Supplier" column="SUPPLIERID"
insert="false" update="false" />
</subclass>

</class>

</hibernate-mapping>

hier die mapping datei in der die Assoziation abgebildet ist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="Supplier" table="supplier" >
<id name="carrierId" type="long" column="carrierid">
<generator class="assigned"/>
</id>

<property name="carrierName" column="CARRIERNAME" type="string"/>
<property name="description" column="description" type="string"/>

<bag name="coverageAreas" >
<key>
<column name="SUPPLIERID" />
</key>
<one-to-many not-found="ignore" class="CoverageArea"></one-to-many>
</bag>


</class>

</hibernate-mapping>

hier der Zugriff, der das richtige Ergebnis liefert:
String hql="from CoverageArea "

hier der Zugriff der das falsche Ergebnis liefert:
Supplier supplier=(Supplier)getSession().get(Supplier.class,new Long(4));
Hibernate.initialize(supplier.getCoverageAreas());


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.