这可能是重复的。但是我找不到与我的问题有关的适当链接。可能是我的搜索结果太糟糕了。因此,希望有一个好的答案或链接到任何有用的解决方案。这是我的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表中插入一组configField。ConfigFields表的配置ID应该来自配置表。对于一组配置字段,配置ID将相同(您可以从代码中猜到)。
上面的代码有效,并保存到两个表中。但是,当我在ConfigFields表中签入时,configurationId为null。我没有设置ID。为什么?如您所见,我没有在ConfigFields对象的每个列表中设置配置对象。我需要设置吗?
如何解决呢?
是的,您坚持的是单向关系。但是由于您希望休眠保持双向关系,因此需要将配置对象设置为configField
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句