Question

Je travaille là-dessus depuis un certain temps, mais ne peut toujours pas comprendre ce qui ne va pas avec mon code. Chaque service a plusieurs profils, mais chaque profil n'a qu'un seul service.

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

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

Profile.hbm.xml. Ajouter

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

Est-ce la bonne façon de mapper?

Était-ce utile?

La solution

  

Chaque service a plusieurs profils, mais chaque profil n'a qu'un seul service.

Ensuite, concevoir votre modèle d'objet en conséquence. Lorsque vous utilisez un outil ORM, vous devez penser objet (entités) et les relations entre les entités, non ids. Le ORM prendra soin de PK, FK, joint, etc. Donc, votre code devrait être quelque chose comme ceci:

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
}

Et le fichier de mappage Profile.hbm.xml:

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

Et dans Service.hbm.xml (parce que votre association semble être bi-directionnel):

...
<set name="profiles" inverse="true">
    <key column="PROFILE_ID" not-null="true"/>
    <one-to-many class="com.mot.diva.dto.Profile"/>
</set>
...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top