/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Hjælp ønskes til Hibernate mapping af Set
Fra : Janus


Dato : 26-01-08 18:00

Hej NG,

Jeg er i tvivl om mit spørgsmål hører til i Java-gruppen eller
databasegruppen, men valgte altså at poste her.


Jeg har følgende klasser:


public abstract class AbstractClass1 {
private Long abstract_id;
public int num;
public String name;
...
}

public abstract class AbstractClass2 extends AbstractClass1 {
public int x;
public int y;
...
}

public class ConcreteClass1 extends AbstractClass2 {
public int width;
public int height;
...
}


Jeg kunne godt tænke mig at mappe således, at klassen AbstractClass1
og AbstractClass2 ikke får en tabel, men at ConcreteClass overtager
AbstractClass'ernes variable. Jeg har forsøgt at mappe denne
konstellation vha. union-subclass, og selve mappingen går fint:


<hibernate-mapping>
   <class name="AbstractClass1" table="ABSTRACT_CLASS1" abstract="true">
   <id name="abstract_id" column="abstract_id" type="java.lang.Long"
access="field">
         <generator class="increment"/>
   </id>

   <property name="num"/>
   <property name="name"/>

   <union-subclass name="AbstractClass2" extends="AbstractClass1"
table="ABSTRACT_CLASS2" abstract="true">
   <property name="x"/>
   <property name="y"/>

      <union-subclass name="ConcreteClass" extends="AbstractClass2"
table="CONCRETE_CLASS">
         <property name="height"/>
         <property name="width"/>
      </union-subclass>
   </union-subclass>
   </class>
</hibernate-mapping>


Der er så flere subclasses som ConcreteClass, disse har jeg udeladt af
ovenstående mapping-fil.

I en anden mapping vil jeg gerne have et Set af typen AbstractClass1,
således Settet kan indeholde alle klasser, der extender AbstractClass1
(så som ConcreteClass):

...
   <set name="set" cascade="save-update">
      <key column="some_id"/>
      <one-to-many class="AbstractClass1"/>
   </set>
...

Men ak!, det virker desværre ikke. Når jeg i mit program forsøger mig
med:

session.beginTransaction();
SomeClass sc = new SomeClass(); // har ovenstående Set mapping.
sc.getSet().add(new ConcreteClass());
session.save(sc);
session.getTransaction().commit();

-får jeg denne fejlmeddelelse: Invalid object name 'ABSTRACT_CLASS1'.
Jeg har fundet ud af, at fejlen er, at det er AbstractClass1-klassen
jeg bruger i min Set-definition. Den er jo abstract og derfor ikke
mappet til en tabel, men Set'et forventer åbenbart denne tabels
eksistens.

Hvordan løser jeg dette mapping-problem? Alle mine superklasser er
abstrakte og jeg har ikke lyst til at lave en konkret mapping, der kan
fungere som parent for mine ConcreteClass'es og dermed som
klassedefinition i Set'et. En sådan løsning vil gøre mit arvehierarki
kluntet at se på.


Pft,

Janus

 
 
Martin (27-01-2008)
Kommentar
Fra : Martin


Dato : 27-01-08 02:06

Janus wrote:
> Hej NG,
>
> Jeg er i tvivl om mit spørgsmål hører til i Java-gruppen eller
> databasegruppen, men valgte altså at poste her.

[SNIP]

Hmm.. ikke et eneste problem med SQL... mon ikke du skulle hoppe over i
java gruppen, det er jo ikke SQL'en der er noget galt med, den gør jo
bare som du ber den om :)

Janus (26-01-2008)
Kommentar
Fra : Janus


Dato : 26-01-08 18:19

On 27 Jan., 02:05, Martin <mar...@aarhof.eu.invalid> wrote:
> Janus wrote:
> > Hej NG,
>
> > Jeg er i tvivl om mit spørgsmål hører til i Java-gruppen eller
> > databasegruppen, men valgte altså at poste her.
>
> [SNIP]
>
> Hmm.. ikke et eneste problem med SQL... mon ikke du skulle hoppe over i
> java gruppen, det er jo ikke SQL'en der er noget galt med, den gør jo
> bare som du ber den om :)

Jep, god idé ... som jeg oprindeligt også havde tænkt mig, men af
uransagelige årsager valgte jeg åbenbart at poste i den forkerte
gruppe alligevel. Sry.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste