Jointable обновление между временными и постоянными объектами? - PullRequest
1 голос
/ 24 ноября 2010

У меня есть отношение «многие ко многим» между постоянным объектом (полученным по запросу) и вновь созданным временным объектом (созданным с помощью new , еще не сохраненным).Они связаны через ассоциацию @JoinTable, например:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "adccollectiontype_cn_node_type", joinColumns = {
    @JoinColumn(name = "idadccollectiontype")
}, inverseJoinColumns = {
    @JoinColumn(name = "idcn_node_type")
})

и на другом конце:

@ManyToMany(mappedBy="cnNodeTypes", cascade=CascadeType.ALL)

Примечание CascadeType.ALL.

Если я простосоздайте связь между этими двумя объектами, добавив каждый в коллекцию другого и сохранив его позже (другой объект и полагаясь на каскад), тогда таблица объединения не обновляется.

Однако, если я вручную persist,Временный объект перед выполнением ассоциации, кажется, работает.

Теперь я попытался найти некоторую информацию об этом случае, почему и как он работает, но я не смог найти никакого объяснения.Может быть, кто-то может просветить меня, правильно ли то, что я предполагаю, и причина этого.

1 Ответ

1 голос
/ 07 декабря 2010

Я не уверен, что достаточно информации, чтобы действительно это объяснить. Если вы изменяете управляемый объект, изменения должны быть получены при фиксации транзакции или при вызове сброса. Итак, управляется ли существующий объект в текущем контексте EntityManager? Работает ли следующее?

ManagedEntity oe = em.find(ManagedEntity.class, id);
NodeType nt = new NodeType(id);
oe.getCnNodeTypes().add(nt);
nt.getOtherEntityCollection().add(oe);
em.flush();

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

...