Сохранение коллекции в объекте с помощью MyBatis

У меня есть классы POJO:

class Ticket {
    private int id;
    private double cost;
    private Date time;
    private List<Place> places;

    // Getters and setters here
}

class Place {
    private int row;
    private int place;

    // Getters and setters here
}

Затем я создаю один билет и несколько мест:

Ticket ticket = new Ticket();
ticket.setCost(58.7);
ticket.setTime(new Date());

Place place1 = new Place();
place1.setRow(1);
place1.setPlace(2);
ticket.addPlace(place1);

Place place2 = new Place();
place2.setRow(3);
place2.setPlace(4);
ticket.addPlace(place2);

И теперь я хочу сохранить его в БД:

session.insert("insertTicket", ticket);
session.commit();

В MapperConfig.xml я пишу следующие строки:

<insert id="insertTicket" parameterType="Ticket">
    INSERT INTO tickets (cost, time) VALUES (#{cost}, #{time})
</insert>

Как сохранить Список мест в автоматическом режиме? Может ли MyBatis сохранить его для меня? Или мне нужно выполнить итерацию вручную с помощью foreach и вручную вставить каждое Place?

Спасибо за любую помощь.


person swap_i    schedule 26.11.2010    source источник


Ответы (1)


Несмотря на то, что MyBatis может поддерживать обратное направление (т. е. заполнение списка во время запроса с помощью вложенного выбора или из соединения), не существует автоматического режима, который вставляет содержащий список в базу данных.

В соответствии с этим обсуждением в группах Google вам необходимо вставить список элементов вручную.

person vanje    schedule 26.11.2010
comment
Хм. Не хорошо... Я думаю, что MyBatis умнее. Существует ли ORM для Java, который может выполнить эту операцию за меня? - person swap_i; 27.11.2010
comment
MyBatis на самом деле умный. Но он не предназначен для ORM. Это всего лишь тонкая оболочка вокруг JDBC. Если эта функциональность является обязательным требованием, вы можете поискать ORM, например Hibernate hibernate.org или EclipseLink eclipse.org/eclipselink . - person vanje; 27.11.2010