首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Hibernate中映射多对一关联,在Hibernate中,子对象具有组合键,其中一部分是父对象中的主键?

如何在Hibernate中映射多对一关联,在Hibernate中,子对象具有组合键,其中一部分是父对象中的主键?
EN

Stack Overflow用户
提问于 2010-11-19 12:20:09
回答 3查看 1.9K关注 0票数 1

我有一个(遗留的)表结构,看起来有点像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
table parent (
  parentid int (PK)
  ...
)

table child (
  parentid int (PK)
  childid int (PK)
  ...
)

也就是说,子代的部分主键是父代的主键。我尝试这样映射(我们使用基于xml的Hibernate):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<hibernate-mapping>
<class name="com.example.MyParent" table="parent">

    <id name="parentid" column="parentid" unsaved-value="0" >
        <generator class="identity"/>
    </id>

    <set name="children" cascade="all">
        <key>
            <column name="parentid"/>
        </key>
        <one-to-many class="com.example.MyChild" />
    </set>
...
</class>

<class name="com.example.MyChild" table="child">
    <composite-id name="id" class="com.example.MyChildId">
        <key-property name="parentid" column="parentid" />
        <key-property name="childid" column="childid" />
    </composite-id>
    ...
</class>

Java类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void updateParent(MyParent param) {
    ht.saveOrUpdate(param);

}

更新:我使用了错误的关系类型(已更新),但现在我遇到了另一个问题:在表中创建子行时,parentid似乎为空。由于parentid是组合键的一部分,因此插入失败。

从日志中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DEBUG SQL - insert into Child(PARENTID, CHILDID) values (?, ?)
TRACE IntegerType - binding null to parameter: 1
TRACE IntegerType - binding '5678' to parameter: 2
WARN  JDBCExceptionReporter - SQL Error: -10, SQLState: 23502
ERROR JDBCExceptionReporter - integrity constraint violation: NOT NULL check constraint;     SYS_CT_10028 table: Child
EN

回答 3

Stack Overflow用户

发布于 2010-11-22 17:16:14

我认为你有两个问题:

  1. 多对一应该在MyChild类中声明(如果我理解correctly).
  2. When使用@JoinColumn注解和组合键,则referencedColumnName是必需的。也许这也适用于XML ...?请参阅http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Primary_Keys_through_OneToOne_and_ManyToOne_Relationships

PS:如果childid已经在识别(唯一的,非空的),就不需要在key中有parentid (FK就足够了)。

票数 0
EN

Stack Overflow用户

发布于 2010-11-22 20:30:44

子映射的...中有什么?它是否偶然声明了一个映射到parentid列的名为parent的属性?

票数 0
EN

Stack Overflow用户

发布于 2010-11-23 13:48:40

正如Tom Anderson所说,您需要子对象到父对象的多对一映射,也许还需要将inverse=true放在父对象集映射上,以便hibernate知道子对象管理关系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4224885

复制
相关文章
svn配置忽略文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
1.7K0
svn配置忽略文件
Git diff 忽略某些文件
我们在使用git diff时总是希望忽略一些文件, 比如一些非代码的改动我们希望看到的是no diff的。下面将简单介绍下如果配置某些文件在git diff时被忽略。
张凝可
2019/08/22
1.7K0
Android Studio SVN忽略文件
更多Android Studio设置:http://blog.csdn.net/yechaoa/article/details/53745386
yechaoa
2022/06/10
1.2K0
Android Studio SVN忽略文件
git提交如何忽略某些文件
在使用git对项目进行版本管理的时候,我们总有一些不需要提交到版本库里的文件和文件夹,这个时候我们就需要让git自动忽略掉一下文件。 使用.gitignore忽略文件 为了让git忽略指定的文件和文件
用户1741436
2018/05/16
15.4K0
idea 设置svn忽略提交文件
点击idea Version Control 右键点击Default Changelist ,New Changelist新建一个Changelist
向着百万年薪努力的小赵
2022/12/02
4K0
idea 设置svn忽略提交文件
git忽略上传文件git忽略上传文件
第一步 在项目目录新建.gitignore文件 第二步 配置文件 文件名可以使用正则匹配 # Default ignored files # 比如常见的.idea .idea
小小咸鱼YwY
2020/06/19
4.1K0
设置SVN忽略文件和文件夹(文件夹)
在多数项目中你总会有文件和文件夹不须要进行版本号控制。这可能包含一些由编译器生成的文件,*.obj,*.lst,也许是一个用于存放可运行程序的输出文件夹。仅仅要你提交改动,TortoiseSVN 就会在提交对话框的文件列表中显示出未版本号控制文件。当然你能够关闭这个显示,只是你可能会忘记加入新的源文件。
全栈程序员站长
2022/07/14
10.5K0
设置SVN忽略文件和文件夹(文件夹)
Git忽略文件.gitignore的使用
当你使用git add .的时候有没有遇到把你不想提交的文件也添加到了缓存中去?比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务器中,但是又为了偷懒每次添加缓存的时候都想用git add .而不是手动一个一个文件添加,该怎么办呢?很简单,git为我们提供了一个.gitignore文件只要在这个文件中申明那些文件你不希望添加到git中去,这样当你使用git add .的时候这些文件就会被自动忽略掉。
落寞的鱼丶
2022/02/17
9540
VSCode插件Todo Tree如何忽略某些文件夹?
VsCode 中的插件 TodoTree是一个特别好用的工具,可以高亮显示任何 打上 // TODO 的位置,同时,在VsCode的工具栏可以将这些TODO列出来。但是,有时侯某些文件中的 TODO 不是你添加的,或者你不想看到这些 TODO,比如 node_modules 中的文件,这时候,如何将这些文件忽略呢? 打开VsCode 文件 => 首选项 => 设置 在输入框中搜索TodoTree 找到Todo-tree>Filter:Exclude Globs 点击添加项 在
CherishTheYouth
2020/10/27
1.5K0
VSCode插件Todo Tree如何忽略某些文件夹?
Eclipse中Maven项目交付SVN忽略配置文件
eclipse与maven插件的结合为我们快速搭建开发环境提供了便捷条件,然而maven编译出来的class文件、配置文件和打包文件实际上都不需要进行版本控制,团队中每个人的开发环境可能不太一样,将.settings目录和.project等文件同步到svn甚至还会引起冲突和不便,因此最好将它们忽略,保持一个干净的svn环境。
星哥玩云
2022/07/03
9320
Eclipse中Maven项目交付SVN忽略配置文件
git全局忽略文件
前阵子做项目时偶然发现自己本地的某个index.js文件无法加入版本库,sourceTree里面一直看不到文件(且项目下面的gitignore文件并没有记录此文件),尝试执行 git add file_name 去手动添加文件。
薛定喵君
2021/05/20
2.1K0
git 忽略 .idea文件
多人开发时,会出现明明在gitignore中忽略了.idea文件夹,但是提交时仍旧会出现.idea内文件变动的情况
韩旭051
2021/05/11
2.7K0
iOS git忽略文件
我的iOS开发时的忽略文件配置 # Xcode *.xccheckout UserInterfaceState.xcuserstate contents.xcworkspacedata build/ *.moved-aside DerivedData *.hmap *.ipa # CocoaPods Pods/ .idea/ *.xcbkptlist
码客说
2019/10/22
1.2K0
git: .gitignore文件 (忽略文件)
Note: 切记目录名后面 一定要加 反斜杠 / ,不然会当成 单文件 处理。
JNingWei
2018/09/27
2.2K0
git: .gitignore文件 (忽略文件)
Git忽略已经提交过一次文件Git忽略文件
也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件
iOSDevLog
2020/07/03
2.5K0
android git忽略文件
我的Android开发时的忽略文件配置 #Android generated bin gen gen* #Eclipse .project .classpath .settings #IntelliJ IDEA .idea *.iml *.ipr *.iws out #Maven target release.properties pom.xml.* #Ant build.xml local.properties proguard.cfg #Gradle .gradle build #OSX .
码客说
2019/10/22
9300
git忽略文件追踪
git忽略追踪文件包括两种,一种是未提交到git仓库的文件,一种是已经提交到git仓库中的文件。
党志强
2020/01/23
2K0
点击加载更多

相似问题

svn-忽略除某些文件夹以外的所有内容

16

Git忽略除某些文件以外的所有文件

10

忽略除某些文件以外的所有东西-- Git

13

hgignore:帮助忽略除某些文件以外的所有文件

30

Dockerignore:忽略除文件夹以外的所有内容

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文