栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate:在涉及外键的复合主键星座中,insertable = false,可更新= false在哪里?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate:在涉及外键的复合主键星座中,insertable = false,可更新= false在哪里?

让我一步一步地回答。

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 =false
countryCount
ZipId
。因此,解决方法如下所示,如下所示修改类中的
country
映射
Zip

@ManyToOne@JoinColumn(name = "country_pre", referencedColumnName = "iso_pre",insertable =  false, updatable = false)private Country country;

希望这有助于您的理解。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406122.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号