Аннотированная коллекция OneToMany не сохраняется через Hibernate - PullRequest
0 голосов
/ 27 августа 2010

В настоящее время я пытаюсь сохранить коллекцию, используя @OneToMany (cascade = CascadeType.ALL) для простого списка объектов. Таблица для Parent_Child создается в MySQL, но ключи для каждого объекта не обновляются при использовании SaveOrUpdate. Есть идеи, в чем проблема? (Мой родительский ключ определен, а потомки созданы). Я добавляю детей в коллекцию родительского объекта перед сохранением с помощью saveOrUpdate. Я использую MySQL с Hibernate 3, и мое свойство auto установлено на create-drop.

Тестовый класс:

public class Tester {
    public static void main(String[] args) {
        VideoChannel testChannel = new VideoChannel("Test Channel");
        VideoChannelMap v = new VideoChannelMap(testChannel, "Test Map");
        VideoSource sc2Vid = new VideoSource("starcraft-ii-ghost-of-the-past.mp4", "EinghersStreamingBucket");
        testChannel.add(sc2Vid);
        Session s = HibernateSessionFactory.getSession();
        s.beginTransaction();
        s.saveOrUpdate(v);
        s.close();
    }           
}

Сущности:

@Entity
public class VideoChannelMap {
    @Id 
    String name;

    @OneToMany(cascade=CascadeType.ALL)
    List<VideoChannel> channelMap;

    public VideoChannelMap(VideoChannel initialVid, String name)
    {
        this.name = name;
        channelMap = new ArrayList<VideoChannel>();
        channelMap.add(initialVid);
        initialVid.setParent(this);
    }
}

@Entity
public class VideoChannel {

    @Id @GeneratedValue
    Long id;
    ...
}

1 Ответ

2 голосов
/ 27 августа 2010

Вы фактически должны совершить транзакцию.Поведение, когда вы закрываете сеанс с открытой транзакцией, не очень хорошо определено и, вероятно, будет зависеть от того, как под ней установлена ​​ваша база данных.

Transaction t = s.beginTransaction();
s.saveOrUpdate(v);
t.commit();
s.close();

Очевидно, у вас также должен быть какой-то try-catch-наконец-то происходит "настоящий" код;)

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