2014-02-06 71 views
3

這可能是重複的。但我找不到與我的問題有關的適當鏈接。可能是我的搜索太糟糕了。所以希望得到一個很好的答案或鏈接到任何有用的解決方案。這裏是我的Configuration.java休眠一對多級聯全部不在父級保存子標識

public class Configuration implements java.io.Serializable { 

    private Integer configurationId; 
    private String configurationName; 
    private Set<ConfigFields> ConfigFieldses = new HashSet<ConfigFields>(0); 

    //getter and setter 

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="configuration") 
    public Set<ConfigFields> getConfigFieldses() { 
     return this.ConfigFieldses; 
    } 

    public void setConfigFieldses(Set<ConfigFields> ConfigFieldses) { 
     this.ConfigFieldses = ConfigFieldses; 
    } 
} 

ConfigFields.java

public class ConfigFields implements java.io.Serializable { 
    private Integer configFieldId; 
    private Configuration configuration; 
    private String configFieldName; 

    //getter and setter 

    @XmlTransient 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="ConfigurationId") 
    public Configuration getConfiguration() { 
     return this.configuration; 
    } 

    public void setConfiguration(Configuration configuration) { 
     this.configuration = configuration; 
    } 
} 

這裏是我的代碼中插入配置

Configuration configuration=new Configuration(); 
configuration.setConfigurationName(configName); 
List<ConfigFields> configFieldsList=new ArrayList<ConfigFields>(); 

for(int i=0;i<fieldLength;i++) { 
    ConfigFields configField=new ConfigFields(); 
// configField.setConfiguration(configuration); 

    String stringI=Integer.toString(i); 

    if(i<fieldLength-1) { 
     configField.setConfigFieldName(ENGINE_FORM+stringI); 
    } else { 
     configField.setConfigFieldName(ENGINE_TABLE+stringI); 
    } 
    configFieldsList.add(configField); 
} 

Set<ConfigFields> configFields-new HashSet<ConfigFields>(configFieldsList); 

configuration.setConfigFieldses(configFields); 

configurationService.insert(configuration); 

我想插入在配置一個配置表和ConfigFields表中的一組configFields。 ConfigFields表具有應該來自組態表的配置ID。對於一組配置字段,配置ID將是相同的(正如你可以從代碼中猜到的那樣)。

上面的代碼工作並保存到兩個表。但是當我檢查ConfigFields表時,configurationId爲空。我沒有設置Id。爲什麼?正如你所看到的,我沒有在ConfigFields對象的每個列表中設置配置對象。我需要設置嗎?

如何解決這個問題?

回答

4

是的,你堅持的是單向的關係。但既然你期望休眠保持雙向關係,你需要將配置對象設置爲configField

+0

謝謝。它得到了工作。一個疑問,如果我想從其他表中刪除一個配置和其他行,是否只需要傳遞配置標識? 'Set '上的註釋'cascade = CascadeType.ALL'是否會起作用? – iCode

+0

是如果您刪除了配置,所有configFields條目也將被刪除,因爲您正在使用級聯ALL –

+0

好的。謝謝! – iCode