Domanda

Ho lavorato su di esso per un bel po ', ma ancora non riesco a capire cosa c'è di sbagliato con il mio codice. Ogni servizio ha più profili, ma ogni profilo ha un solo servizio.

Service
{
Long service_id; // primary key
... getter/setter
}

Profile
{
Long profile_id; // primary key
Long service_id; // foreign key
... getter and setter
}

in Profile.hbm.xml. Aggiungo

< many-to-one name="service_id" class="com.mot.diva.dto.Service" column="SERVICE_ID" cascade="save-update">
< /many-to-one>

E 'il modo corretto per mappare esso?

È stato utile?

Soluzione

  

Ogni servizio ha più profili, ma ogni profilo ha un solo servizio.

Quindi progettare il modello a oggetti di conseguenza. Quando si utilizza uno strumento ORM, è necessario pensare agli oggetti (entità) e le relazioni tra le entità, non IDS. L'ORM si prenderà cura di PK, FK, si unisce, ecc Quindi, il codice dovrebbe essere qualcosa di simile:

public class Service implements Serializable {
    private Long service_id; // primary key
    private Set<Profile> profiles = new HashSet<Profile>();

    // ... getter/setter
}

public class Profile implements Serializable {
    private Long profile_id; // primary key
    private Service service;

    // ... getter and setter
}

E il file di mapping Profile.hbm.xml:

....
<many-to-one name="service" 
             class="com.mot.diva.dto.Service"
             column="SERVICE_ID"
             cascade="save-update">
</many-to-one>
...

E in Service.hbm.xml (perché la vostra associazione sembra essere bidirezionale):

...
<set name="profiles" inverse="true">
    <key column="PROFILE_ID" not-null="true"/>
    <one-to-many class="com.mot.diva.dto.Profile"/>
</set>
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top