Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Вопрос по Hibernate, связь ManyToMany


Автор: brejnev 8.8.2008, 13:42
Есть классы Questionnaire и Resource, связанные ManyToMany. Связь я описал только в одном классе - Questionnaire

Код

@Entity
public class Questionnaire implements Serializable {
...
    @ManyToMany(targetEntity = Resource.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @JoinTable(name = "tres_to_q_association",
    joinColumns = {@JoinColumn(name = "f_questionnaire")},
    inverseJoinColumns = {@JoinColumn(name = "f_resource")})
    private Set<Resource> resources;
...
 

Далее хочу сделать вот что - скопировать экземпляр Questionnaire и связать его с Resources оригинала.
Код

...
       Set<Resource> resources = originalQuestionnaire.getResources();
        copiedQuestionnaire.setResources(resources);
        getQuestionnaireManager().updateQuestionnaire(copiedQuestionnaire);
...


Метод updateQuestionnaire(Questionnaire questionnaire) делает следующее

Код

getHibernateTemplate().update(questionnaire);



Связи для нового объекта устанавливаются, но при этом удаляются связи у старого объекта smile 
Не хотелось бы так, хочу чтобы старые связи оставались на месте и только добавлялись новые. Что подкрутить?

Автор: alexadr 11.8.2008, 12:02
а какие при этом гибернейт sql-запросы генерит?

Автор: Nuru 15.11.2008, 17:36
Поидее так быть не должно. В конфигурации SessinFactory попробуй убрать     <property name="hibernate.hbm2ddl.auto">create</property>. Т.к. она каждый раз пересоздаёт всё schema и соответственно таблицы дропаются а потом криейтяца.

Автор: v2v 15.11.2008, 17:41
brejnev, в update функцию ты должен передавать не только те объекты которые ты хочешь добавить в коллекцию, а ВСЕ, включая те что уже в бд.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)