Привет Я пытаюсь отобразить некоторые классы в спящем режиме и имею общую проблему, как такое сопоставление можно сделать. Существует класс пользователей и Facebook пользовательский класс, который имеет следующую структуру Класс пользователя:Сопоставление такого же отношения классов
public class User{
public User(){}
Long Id;
String FirstName;
String LastName;
....
FbUser fbuser;
//// all requred
getters and setters...
}
Facebook класс FbUser может иметь список друзей, которые являются объектами одного и того же класса FbUser.
public class FbUser{
public FbUser(){}
Long fbId;
String FirstName;
String LastName;
List<FbUser> friends;
//// all requred
getters and setters...
}
До сих пор я делал много отношений между пользователем и 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>
А теперь 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 можно отобразить FbUser Список внутри FbUser файл карты? Я заблудился :(
Привет, Ваше решение завораживает. Однако не могли бы вы объяснить, почему я должен использовать коллекцию вместо List, если у меня нет строки индекса? и зачем мне нужен составной первичный ключ? –
@ danny.lesnik Если вы используете Список, Hibernate будет жаловаться, что у вас нет столбца индекса. Смотрите здесь почему: http://stackoverflow.com/questions/3580686/hibernate-one-to-many-mapping-works-with-a-list-but-not-a-set/3580835#3580835 Вам нужен составной первичный потому что ваши отношения ManyToMany «были разделены» на отношения OneToMany. Когда отношения ManyToMany разделяются на OneToMany, ** вам нужен составной первичный ключ **. ManyToMany похож на OneToMany (с составным первичным ключом) –
@ danny.lesnik Имейте в виду, что решение, предоставленное @Plinio Pantaleão, также отлично работает. Но он использует набор.Предпочитаете использовать пакет вместо **, если у вас нет согласованного метода equals и hashCode ** В противном случае вы можете получить неожиданное поведение. –