让我一步一步地回答。
1.您何时需要insertable = false,可更新= false
?
让我们看下面的映射,
public class Zip { @ManyToOne @JoinColumn(name = "country_pre", referencedColumnName = "iso_pre") private Country country = null @Column(name = "country_pre") private String countryCode;}在这里,我们使用两个不同的属性来引用表中的同一列。在下面的代码中,
Zip z = new Zip();z.setCountry(getCountry("US"));z.setCountryCode("IN");saveZip(z);hibernate在这里做什么?
为了避免这种不一致,hibernate要求您指定关系船的更新点。这意味着
您可以n
多次引用表中的同一列,但是只能使用其中之一来更新,而所有其他都将是只读的。
2.为什么hibernate状态会抱怨您的映射?
在您的
Zip类中,您引用的
ZipId是再次包含国家/地区代码的Embedded
id类。与上述情况一样,现在您可以
counry_pre从两个位置更新该列。因此,hibernate给出的错误是正确的。
3.如何解决您的情况?
不能。理想情况下,您希望您的
ZipId类生成ID,因此您不应该在中添加
insertable = false, updatable =falsecountryCount
ZipId。因此,解决方法如下所示,如下所示修改类中的
country映射
Zip,
@ManyToOne@JoinColumn(name = "country_pre", referencedColumnName = "iso_pre",insertable = false, updatable = false)private Country country;
希望这有助于您的理解。



