2012-09-21 21 views
0

在我的struts動作中,我從數據庫中檢索一個對象X,獲取對其包含的一對多集合的引用,向該集合添加一些對象並保存原始對象X. 問題是我沒有得到任何錯誤拋出,但由一對多引用的表沒有得到任何新的行添加到它。Hibernate數據庫更新沒有傳播給孩子

我的繼承人動作代碼...

public String saveSelectedDefinitions() 
    { 
     WordT wordT = wordDao.get(2); 
     Set<DefinitionT> storedDefs = wordT.getDefinitionTs(); 

     for(int i=0; i<3; i++) 
     { 
      DefinitionT selectedDef = new DefinitionT(); 
      selectedDef.setValue("abc"); 
      selectedDef.setWordT(wordT); 
      storedDefs.add(selectedDef); 
     } 
     wordT.setDefinitionTs(storedDefs); 
     wordDao.save(wordT); 

     return SUCCESS; 
    } 

我的繼承人WordT類

@Entity 
@Table(name = "word_t", schema = "public") 
public class WordT implements java.io.Serializable { 

    private int id; 
    private Set<DefinitionT> definitionTs = new HashSet<DefinitionT>(0); 

    public WordT() { 
    } 

    public WordT(int id) { 
     this.id = id; 
    } 

    public WordT(int id, Set<DefinitionT> definitionTs) { 
     this.id = id; 
     this.definitionTs = definitionTs; 
    } 

    @Id 
    @Column(name = "id", unique = true, nullable = false) 
    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 


    @OneToMany(fetch = FetchType.EAGER, mappedBy = "wordT") 
    public Set<DefinitionT> getDefinitionTs() { 
     return this.definitionTs; 
    } 

    public void setDefinitionTs(Set<DefinitionT> definitionTs) { 
     this.definitionTs = definitionTs; 
    } 

} 

和我的繼承人DefinitionT類

@Entity 
    @Table(name = "definition_t", schema = "public") 
    public class DefinitionT implements java.io.Serializable { 

     private int id; 
     private WordT wordT; 

     public DefinitionT() { 
     } 

     public DefinitionT(int id, WordT wordT) { 
      this.id = id; 
      this.wordT = wordT; 
     } 

     public DefinitionT(int id, WordT wordT, String value, int typeId, 
       Boolean selected) { 
      this.id = id; 
      this.wordT = wordT; 
     } 

     @Id 
     @Column(name = "id", unique = true, nullable = false) 
     public int getId() { 
      return this.id; 
     } 

     public void setId(int id) { 
      this.id = id; 
     } 

     @ManyToOne(fetch = FetchType.EAGER) 
     @JoinColumn(name = "word_id", nullable = false) 
     public WordT getWordT() { 
      return this.wordT; 
     } 

     public void setWordT(WordT wordT) { 
      this.wordT = wordT; 
     } 

    } 

我使用的Hibernate工具生成的DAO我和Pojos 如果我使用DefinitionDao來保存定義T實例,它會持續fin因此表格的完整性是可以的。爲什麼它不能保存這個集合,並且不給我任何錯誤,爲什麼它沒有這樣做呢?

回答

1

Yo在OneToMany關聯中沒有層疊,因此您可能對單詞實體執行的任何操作都不會級聯到其定義。而且,由於定義實體是關聯的所有者,因此您需要爲Hibernate設置它的字屬性以保持關聯。

+0

嗨,我有WordT,每個定義引用在每個定義實例中設置。我不明白你的意思是「沒有一對多協作的級聯」我該怎麼實現呢? – MayoMan

+0

剛剛發現了一些Google搜索後啓用級聯。如果它有效,將會接受爲答案。謝謝 – MayoMan