我正在使用现有数据库架构在遗留代码库上工作。现有代码使用SQL和PL / SQL在数据库上执行查询。我们的任务是使项目数据库引擎的一小部分不可知(首先,最终改变一切)。我们选择使用 Hibernate 3.3.2.GA 和“ * .hbm.xml”映射文件(与注释相反)。不幸的是,更改现有架构是不可行的,因为我们无法退化任何旧版功能。

我遇到的问题是当我试图映射单向,一对多关系时,FK也是复合PK的一部分。这是类和映射文件...

CompanyEntity.java 通用标签

CompanyNameEntity.java 通用标签

CompanyNameEntity.hbm.xml 通用标签

此代码对于带有名称的公司的SELECT和INSERT正常工作。尝试更新和现有记录时遇到问题。我收到一个BatchUpdateException,并且在查看SQL日志后,我看到Hibernate试图做一些愚蠢 ... 通用标签

Hibernate尝试在更新子记录之前取消关联它们。问题在于该字段是PK的一部分,不能为空。我发现使Hibernate不这样做的快速解决方案是在父映射的“ key”元素中添加“ not-null='true'”。所以现在映射可能看起来像这样...

CompanyNameEntity.hbm.xml 通用标签

此映射给出了例外情况... 通用标签

我现在的问题是我试图将这些属性添加到key-property元素中,但是DTD不支持。我还尝试过将其更改为“多对一”的元素,但这也不起作用。所以...

如何将“ insert='false'update='false'”映射到也用于一对多FK的复合ID密钥属性上?

有帮助吗?

解决方案

我认为您要查找的注释是: 通用标签

您应该能够在hbm.xml中使用类似的映射,如此处所示(在23.4.2中):

http://docs.jboss。org / hibernate / core / 3.3 / reference / en / html / example-mappings.html

其他提示

“ Dino TW”提供了指向评论的链接休眠映射异常:实体映射中重复的列具有重要信息。

该链接提示在设置映射中提供“ inverse= true”,我尝试过,它实际上可以工作。Set和Composite键组合在一起的情况非常罕见。设为inverse= true,我们将自行使用复合键保留对表的插入和更新。

下面可以是必需的映射, 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top