2012-01-31 1 views
0

В базе данных mysql есть таблицы базы данных, соответствующие этим классам с соответствующими иностранными ключами. Дайте мне знать, если мне нужно поставить эти отношения здесь.Как я могу сохранить этот сложный объект в базе данных с помощью hibernate?

class Itinerary { 
Airport Departure; 
Airport Arrival; 
Airline flight; 
} 

class Airport{ 
int idAirport; 
String terminal; 
City city; 
} 

class City{ 
int idCity; 
String name; 
}  

class Airline{ 
int idAirline; 
String flightNumber; 
} 

Я использую что-то вроде этого: http://pastebin.com/YzYMTBg3 построить маршрутный объект. Это то, что меня озадачивает, и я не знаю, что это хороший способ справиться с этим, используя спящий режим в качестве моего ORM.


AirSegmentBuilder segmentBuilder = new AirSegmentBuilder(); 
segmentBuilder.addDepartureAirport("JFK"); 
segmentBuilder.addArrivalAirport("SFO"); 

Я пытаюсь добавить вылета и аэропорт прибытия (объекты) на мой маршрут здесь. Эти объекты в свою очередь, сохраняются в базе данных, как:

аэропорта:

id | name | terminal 
1  | JFK  | 1 
2  | SFO  | B1 

Так что, когда мне нужно добавить эти аэропорты в мой маршрут, мне нужно получить объекты аэропорта первым использованием запроса на основе имени? ; и затем присоединить эти объекты к маршруту? Как только у меня будет создан объект маршрутизации и сохраните его в базе данных с помощью спящего режима, сможет ли он правильно подобрать внешние ключи?

ответ

2

Предполагая, что вы используете xml для настройки вашего спящего режима. Вы можете написать свой Itinerary.hbm.xml как это для достижения своей цели:

<many-to-one name="Airport" class="pkg.Airport" 
       column="foregn_key1" not-null="true" fetch="join" /> 
<many-to-one name="Airline" class="pkg.Airline" 
       column="foregn_key2" not-null="true" fetch="join" /> 

где аэропорт, авиакомпания и маршрут являются таблицами в вашей БД. Надеюсь, что это поможет ...

Примечание. Это всего лишь своего рода пример. Возможно, вам понадобится обновить ваши компоненты соответственно.