Hibernate one to many cascade all Not saving child id in parent
cascade, hibernate, java
Solution
Yes what you have persisted is a uni directional relationship. But since you expect hibernate to maintain a bi directional relationship you need to set the configuration object to configField
Problem
This might be duplicate. But I don't find a proper link to my problem. May be my searching is too bad. So hoping for a good answer or link to any useful solution. Here is my 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; } } ``` Here is my code to insert the 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); ``` I want to insert one configuration in Configuration table and a set of configFields in ConfigFields table. ConfigFields table has configuration id that should come form confguration table. For a set of config fields, configuration id will be same (As you can guess from code). The above code works and saving to both tables. But when I check in ConfigFields table, the configurationId is null. I is not setting the Id. Why? As you can see I am not setting the configuration object in each list of ConfigFields object. Do I need to set that? How to solve this?