Salut J'essaie de mapper certaines classes en mode hibernation là-bas et j'ai un problème général quant à la façon dont un tel mappage peut être effectué. Il est classe User et Facebook classe utilisateur qui a la structure suivante classe utilisateur:Mappage de la même relation de classe
public class User{
public User(){}
Long Id;
String FirstName;
String LastName;
....
FbUser fbuser;
//// all requred
getters and setters...
}
Facebook classe FbUser peut avoir la liste des amis qui sont des objets de la même classe FbUser.
public class FbUser{
public FbUser(){}
Long fbId;
String FirstName;
String LastName;
List<FbUser> friends;
//// all requred
getters and setters...
}
Jusqu'à présent, j'ai fait beaucoup à une relation entre utilisateur et FbUser.
<hibernate-mapping>
<class
name="User"
table="User"
>
<id
name="Id"
column="ID"
type="java.lang.Long"
unsaved-value="null"
>
<generator class="increment"/>
</id>
<property
name="FirstName"
update="true"
insert="true"
not-null="false"
unique="false"
type="java.lang.String"
>
<column name="FirstName" />
</property>
<property
name="LastName"
update="true"
insert="true"
not-null="false"
unique="false"
type="java.lang.String"
>
<column name="LastName" />
</property>
<many-to-one
name="fbUser"
class="FbUser"
cascade="all"
column="fbId"
unique="true"
/>
</class>
</hibernate-mapping>
Et maintenant, le FbUser Mapping:
<hibernate-mapping>
<class
name="FbUser"
table="FbUser"
>
<id
name="fbId"
column="fbId"
type="java.lang.Long"
unsaved-value="null"
>
<generator class="increment"/>
</id>
<property
name="FirstName"
update="true"
insert="true"
not-null="false"
unique="false"
type="java.lang.String"
>
<column name="FirstName" />
</property>
<property
name="LastName"
type="java.lang.String"
update="true"
insert="true"
column="LastName"
not-null="true"
unique="false"
/>
</class>
</hibernate-mapping>
Chow puis-je la carte FbUser Liste dans la carte FbUser fichier? Je me suis perdu :(
Salut, Votre solution est fascinante. Cependant pourriez-vous s'il vous plaît expliquer pourquoi devrais-je utiliser la collection à la place Liste si je n'ai pas la ligne d'index? et pourquoi ai-je besoin d'une clé primaire composite? –
@ danny.lesnik Si vous utilisez une liste, Hibernate se plaindra que vous n'avez pas de colonne d'index. Voir ici pourquoi: http://stackoverflow.com/questions/3580686/hibernate-one-to-many-mapping-works-with-a-list-but-not-a-set/3580835#3580835 Vous avez besoin d'un primaire composite clé parce que votre relation ManyToMany "a été divisée" en une relation OneToMany. Quand une relation ManyToMany est divisée en OneToMany, ** vous avez besoin d'une clé primaire composite **. ManyToMany est similaire à OneToMany (avec une clé primaire composite) –
@ danny.lesnik Gardez à l'esprit la solution fournie par @Plinio Pantaleão fonctionne également très bien. Mais il utilise un ensemble.Préférez utiliser un sac à la place ** si vous n'avez pas de méthode equals et hashCode cohérente ** Sinon, vous pouvez avoir un comportement inattendu. –