2013-04-29 1 views
0

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

newEntity=setPropsFromTransientFields(newEntity,"newEntity"); 
sess.save(newEntity); 

, но когда я попытался обновить exixting записи, то она сохраняет succesfullly объединения столбцов таблицы

persistedEntity=setPropsFromTransientFields(persistedEntity,"updateEntity"); 
sess.saveOrUpdate(persistedEntity); 

присоединиться к таблице отображения приведенного ниже

@ManyToMany(targetEntity=TechnologyProduct.class) 
    @JoinTable(
     name = "contact_technology", 
     joinColumns = @JoinColumn(name="contact_id", referencedColumnName="id"), 
     inverseJoinColumns = @JoinColumn(name="technology_id", referencedColumnName="id") 
    ) 
    public List<TechnologyProduct> getTechKeywords() { 
     return techKeywords; 
    } 

ответ

0

Hibernate по умолчанию не пытается выполнить каскадную операцию. Так что если у вас есть юридическое лицо

class E{ 
    List<X> xes; 
} 

, то вы несете ответственность за надлежащее обращение с соотношением xes. То есть вам нужно убедиться, что объекты X сохраняются в БД. Вы также можете настроить сохранение каскада, тогда Hibernate позаботится об этом отдельно.

Ваше обновление работает так, как вы ожидаете, потому что связанные объекты (X в моем примере) были добавлены в сеанс Hibernate до и Hibernate автоматически отслеживает их изменения и выполняет все необходимые операции DB. Это моя догадка, так как я не вижу, как объект читается из БД.