Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633

    [hibernate] problema di mappaggio di associazioni generiche

    Ciao,
    ho qualche problema a mappare il mio Data Model in Hibernate (lo conosco da poco). Quello in cui mi sono imbattuto, non credo sia un problema raro...ma non sono riuscito a trovare niente che mi spieghi come risolverlo...

    Le mie tabelle sono:
    TableA : ID_ENTITYA (altri dati di A)
    TableB : ID_ENTITYB (altri dati di B)
    TableC : ID_ENTITYC (altri dati di C)
    TableD_Link_A_and_Entities: ID_LINK, ID_A (foreign key con TableA), TYPE_ENTITY, ID_ENTITY

    Il mio problema è riuscire a mappare l'associazione generica descritta dalla tabella TableD_Link_A_and_Entities dove la coppia di colonne TYPE_ENTITY, ID_ENTITY specificano l'entità associata con A (es. se TYPE_ENTITY=B allora l'entità associata ad A è V, se TYPE_ENTITY=C allora è un'entità C, ecc.)

    Quello che mi piacerebbe ottenere è una classe persistente del tipo:
    Class EntityA {
    Set getEntitiesB()
    Set getEntitiesC()
    ...
    }

    Qualche suggerimento?
    Grazie,
    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  2. #2

    Re: [hibernate] problema di mappaggio di associazioni generiche

    Originariamente inviato da standard
    Ciao,
    ho qualche problema a mappare il mio Data Model in Hibernate (lo conosco da poco). Quello in cui mi sono imbattuto, non credo sia un problema raro...ma non sono riuscito a trovare niente che mi spieghi come risolverlo...

    Le mie tabelle sono:
    TableA : ID_ENTITYA (altri dati di A)
    TableB : ID_ENTITYB (altri dati di B)
    TableC : ID_ENTITYC (altri dati di C)
    TableD_Link_A_and_Entities: ID_LINK, ID_A (foreign key con TableA), TYPE_ENTITY, ID_ENTITY

    Il mio problema è riuscire a mappare l'associazione generica descritta dalla tabella TableD_Link_A_and_Entities dove la coppia di colonne TYPE_ENTITY, ID_ENTITY specificano l'entità associata con A (es. se TYPE_ENTITY=B allora l'entità associata ad A è V, se TYPE_ENTITY=C allora è un'entità C, ecc.)

    Quello che mi piacerebbe ottenere è una classe persistente del tipo:
    Class EntityA {
    Set getEntitiesB()
    Set getEntitiesC()
    ...
    }

    Qualche suggerimento?
    Grazie,
    ciauz
    Non ho ben capito Comunque in Hibernate (ed anche in altri) hai possibilità di dirli di costruire classi diverse in base ad un campo discriminante.
    Ad esempio se Type_entity = A allora ti costruisce un oggetto EntityA, oppure se B ti costruisce un oggetto EntityB.

    Spero di esserti stato di aiuto

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    Grazie,
    so che è possibile definire l'ereditarietà con l'uso del discriminator e mi sembra un buono spunto. Quello che mi manca è capire come fare il tutto.
    Mi pare di aver capito che suggerisci di specializzare una classe per i Link a seconda dell'entità che collega?
    ho capito bene?
    se sì, come? puoi farmi un esempio con del codice?

    grazie mille,
    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    114
    con il discriminator utilizzi un'unica tabella in cui vengono messi tutti i dati delle sottoclassi di una classe astratta.
    ad es. hai una classe astratta Gatto. poi 2 altre classi che derivano da questa e che hanno attributi aggiuntivi per la sottoclasse.
    quando salvi un oggetto della sottoclasse va sempre a finire nella tabella gatto. quando poi ti riprendi ad es. un oggetto GattoRandagio(sottoclasse) sarà appunto il discriminator messo nella tabella che ti dirà quali tuple sono riferite a un oggetto GattoRandagio. questo naturalmente è gestito in modo trasparente da hibernate grazie al file di mapping in cui specifichi il discriminator per quella sottoclasse.
    ho trovato questo esempio con le birre
    classe astratta Birra . sottoclassi Domestic e di Importazione
    codice:
    <class name="com.example.Beer" table="beer"
    abstract="true">
    <id name="id" type="integer">
    <generator class="native"/>
    </id>
    <discriminator column="type"/>
    <property name="brand"/>
    <property name="price"/>
    <many-to-one name="truck" column="truck_id"/>
    <subclass name="com.example.DomesticBeer"
    discriminator-value="DOMESTIC"/>
    <subclass name="com.example.ImportedBeer"
    discriminator-value="IMPORTED">
    <property name="country"/>
    <property name="duty"/>
    </subclass>
    </class>
    quella di importazione ha 2 attributi aggiuntivi
    <property name="country"/>
    <property name="duty"/>
    che verranno riempiti naturalmente solo quando persisti la classe ImportedBeer.
    spero di averti chiarito qualcosa.
    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.