вставка значений в несколько таблиц с использованием Hibernate - PullRequest
2 голосов
/ 13 октября 2010

у меня есть таблицы hotel и hotel_services .

hotel table contains:
hotel_id
hotel_name

hotel_services contains:
hotel_id
hotel_service_name

каждый отель может предложить несколько услуг, поэтому в моей форме пользователь может ввести столько услуг, сколько он хочет за один раз.

так, например:

hotel name: HOTEL1
hotel_services:
1. hotel_service1
2. hotel_service2
3. hotel_service3

Мой вопрос заключается в том, как мне сделать это в спящем режиме таким образом, чтобы я мог вставить все данные в соответствующие таблицы (которые являются таблицами hotels и hotel_services).

спасибо за помощь ..

1 Ответ

4 голосов
/ 13 октября 2010

То, что вы описываете, является базовым OneToMany отношением между Hotel и Services, и отображение будет выглядеть так (я сопоставлю его как двунаправленную ассоциацию, используя аннотации):

@Entity
public class Hotel {
    @Id @GeneratedValue
    private Long id;

    @OneToMany(cascade=ALL, mappedBy="hotel")
    Set<Service> services = new HashSet<Service>();

    // other attributes, getters, setters

    // method to manage the bidirectional association
    public void addToServices(Service service) {
        this.services.add(service);
        service.setHotel(this);
}

@Entity
public class Service {
    @Id @GeneratedValue
    private Long id;

    @ManyToOne
    private Hotel hotel;

    // getters, setters, equals, hashCode
}

А вот фрагмент, демонстрирующий, как это использовать:

SessionFactory sf = HibernateUtil.getSessionFactory(); // this is a custom utility class
Session session = sf.openSession(); 
session.beginTransaction();

Hotel hotel = new Hotel();
Service s1 = new Service();
Service s2 = new Service();
hotel.addToServices(s1);
hotel.addToServices(s2);
session.persist(hotel);

session.getTransaction().commit();
session.close();

Чтобы пойти дальше (потому что я не буду объяснять все в этом ответе), взгляните на:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...